Häufig gestellte Fragen:
cocos2d für das I-Phone: Wie ist schnell cocos2d (im Vergleich zu anderen Spielmotoren)? How fast is cocos2d (compared to other game engines)?Suchen Sie meinen cocos2d für häufig gestellte I-Phone-Fragen & Tutorenkurse
Bemerken Sie bitte, dass die Blog-Suche an der oberen richtigen Ecke meine häufig gestellten Fragen und Tutorenkurse nicht sucht.- Bemerken Sie: Teilen Sie bitte direkte Download-Verbindungen zu PDF Dateien nicht, die Download-Verbindungen laufen nach einem Paar Minuten ab!
Die Frage ist zu allgemein, um geantwortet zu werden. Ich verstehe den Begriff - wenn Sie dabei sind, ein Auto zu kaufen, wollen Sie wissen, wie schnell er gehen kann. Aber als mit Autos, wenn Sie nur ringsherum in der Stadt fahren, ist der topspeed einfach zu Ihnen egal. But as with cars, if you only drive around in the city the topspeed simply doesn't matter to you.
Die meisten beginnenden Spielprogrammierer fahren gerade um die Stadt für die forseeable Zukunft. Wenn der Code, an dem sie arbeiten, langsam ist, ist es fast nie die Spielmotorschuld. Ich habe viel Spielcode des Anfängers oder Halbfachmannes gesehen. In fast allen Fällen gab es nur zwei Probleme, die strenge Leistungsprobleme verursachten: Der Entwickler war irgendein überehrgeizig (gewöhnlich verbunden mit dem nicht Verstehen der Beschränkungen der Plattform und Engpässe), oder der Code wurde einfach mit der Geschwindigkeit im Sinn (gewöhnlich verbunden mit einem Mangel daran nicht geschrieben, den Spielmotor, die Programmiersprache und die Plattform zu verstehen). I've seen a lot of beginner's or semi-professional's game code. In almost all cases there were only two issues that caused severe performance issues: the developer was either over-ambitious (usually coupled with not understanding the platform's limitations and bottlenecks) or the code was simply not written with speed in mind (usually coupled with a lack of understanding the game engine, programming language and platform).
Für fast alle Entwickler ist es egal, wie schnell cocos2d im Vergleich mit einem anderen Motor ist. Die echte Frage sollte sein: Was kann es für Sie tun? Wie viel Zeit wird es Sie sparen, Ihr Spiel bauend? Hat es Spielredakteure? Ist es leicht, Benutzerschnittstelle-Elemente wie Knöpfe zu bauen? Macht es es aufrichtig und leicht, mit anderen zusammenzuarbeiten? Und so weiter... diese sind die Fragen, die Sie in erster Linie stellen müssen, indem Sie einen Spielmotor bewerten. what can it do for you? How much time will it save you building your game? Does it have game editors? Is it easy to build User Interface elements like buttons? Does it make it straightforward and easy to collaborate with others? And so on ... these are the questions you need to ask first and foremost when evaluating a game engine.
Jedenfalls ist es ein Lernprozess für uns alle. Wenn Sie sich über die Leistung sorgen, fangen Sie einfach an. Ich bin überzeugt, dass Sie cocos2d schnell genug zunächst finden werden, und erfahrene Programmierer wunderbare Dinge damit machen können und überhaupt nicht beschränkt werden. Ich denke, dass das all das sagt. I'm sure you'll find cocos2d fast enough to begin with, and experienced programmers can make wonderful things with it and aren't limited at all. I think that says it all.
Wenn Sie wirklich wissen wollen, was cocos2d in sehr spezifischen Verhältnissen erreichen kann, dann werfen auf die cocos2d Leistungstests einen Blick.
Beispiele für überehrgeizige Absichten
- Zeichnung 100 + große Elfen mit multi-layered parallaxing Hintergründe plus Partikel-Effekten und Physik-Gegenstände und Erwartung von 60 fps
- das Verwenden zu vieler Spielgegenstände, welcher einfache Schleifen veranlasst, Millionen von Sachen jeder Rahmen zu schätzen
- Emulierung shader Effekten in der Software, Textur-Gedächtnis jeder Rahmen manipulierend
Der PSP-3000 in diesem Image ist gerade eine Gedächtnishilfe, dass Sie dasselbe Niveau der Sehqualität und Kompliziertheit auf dem I-Phone nicht erwarten können als auf dem PSP. Noch nicht irgendwie. Das I-Phone 3GS kann nahe kommen, und der iPad kann wirklich höher sein - aber die Mehrheit Ihrer Kunden führt noch I-Phone 1. und 2. Generationsgeräte! Versuchen Sie, Ihre Erwartungen auf einem Nintendo DS Niveau, und dann zu halten, wenn Sie das bekommen eine gute Leistung zu bringen, können Sie immer an das Hinzufügen von mehr Sehsüßigkeiten später denken. The iPhone 3GS may come close and the iPad may actually be superior - but the majority of your customers is still running iPhone 1st and 2nd generation devices! Try to keep your expectations on a Nintendo DS level, and then when you get that performing well, you can always think about adding more visual goodies later on.
Beispiele für den Code, der nicht mit der Geschwindigkeit im Sinn geschrieben ist
- jeder Spielgegenstand überprüft jeden anderen Spielgegenstand, wenn es näher ist als x an sich selbst. Mit 1000 Gegenständen verursacht das 1.000 * 1.000 = eine Million durchgeführte Kontrollen. Die bessere Lösung ist, die Liste aller 1000 Gegenstände und des Tuns der Kontrolle über das Bleiben 999 Gegenstände durchzugehen, die folgende Schleife überprüft nur das Bleiben 998 Gegenstände und so weiter. Das arbeitet weil, wenn A B nicht nah ist, dann kann B nicht A nah sein, so können wir diejenigen auslassen. Sieh das Pseudocodebeispiel im Image oben. The better solution is to go through the list of all 1000 objects and doing the check on the remaining 999 objects, the next loop only checks the remaining 998 objects, and so on. This works because if A isn't close to B, then B can't be close to A, so we can skip those. See the pseudocode example in the image above.
- Zeichnung der Vielzahl von Gegenständen außerhalb des Schirms ohne eine einfache Kontrolle, um nur Gegenstände zu ziehen, die nicht mindestens teilweise auf dem Schirm sind
- das Bewegen vieler Gegenstände nur kleine Entfernungen, cocos2d Handlungen verwendend - verursacht das viele alloc/dealloc Zyklen und kann Leistung herunterziehen. Um diesen Code zu verbessern, bewegen die Gegenstände manuell, eine Geschwindigkeit jeder Rahmen zu den Positionen des Gegenstands manuell hinzufügend. Eine ziemlich wirksame Weise zu tun soll das einen Physik-Motor verwenden, um Gegenstand-Bewegung mit festen Geschwindigkeiten bei einer gegebenen Richtung zu haben. One rather effective way to do this is to use a physics engine to have objects move at fixed speeds in a given direction.









Das Erleuchten des Postens. Dank!
Und, natürlich, habe ich einige Frage
- alles ist relativ, aber für den allgemeinen Code ist besser, um NSString, NSArray zu verwenden (und die Kosten zu bezahlen, neue Gegenstände zu schaffen), oder die veränderlichen? Welcher kann die Rahmen sein, um zwischen jedem zu wählen?
- Ich frage mich, ob das neue I-Phone 4.0s größere Leistung ein Problem sein wird. Spiele die führen glatt im I-Phone 1. und 2. Generationsgeräte, werden wahrscheinlich zu schnell laufen?
Hallo Max,
ich bezweifle, dass die NSMutable* datasets Leistungsmörder sind. Ich habe keine Tests gemacht, aber ich bin ziemlich überzeugt, dass, wenn Sie sie überhaupt nicht ändern, sie wahrscheinlich ebenso gut leisten werden wie die nichtveränderlichen. Jetzt einmal Sie muss *do* die Reihe oder Schnuren ändern es ist gut, sie veränderlich zu haben, so dass auf Zeug für Sie hinter den Kulissen aufgepasst wird. Andererseits, wenn Sie wissen, dass Sie nur die Sachen einmal schaffen werden, aber nie wiederbestellt, entfernen oder hinzufügen, dass andere dann die nichtveränderlichen verwenden. Für mich ist es eine Sache des Gebrauch-Falls aber nicht der Leistung. Now, once you *do* need to change the arrays or strings it’s good to have them mutable so that stuff is taken care for you behind the scenes. On the other hand, if you know that you’ll only be creating the items once but never re-order, remove or add others then use the non-mutable ones. For me it’s a matter of use case rather than performance.
Spiele werden schneller auf neueren Geräten nicht laufen. cocos2d's CCDirector überzeugt sich davon. Sie erholen sich framerates natürlich, aber nicht schneller gameplay. Das hält für alle modernen Spielmotoren für wahr. You do get better framerates of course but not faster gameplay. That holds true for all modern game engines.