Bestes Bestellmethode für Fliesenbasis, Cocos2D-iPhone-Spiele?
-
12-11-2019 - |
Frage
Ich möchte isometrische, fliesenbasierte, iPhone-Spiele mit COCOS2D herstellen.
Sprites müssen oben auf anderen Spriten gezogen werden, die "hinter" sind. Ich suche nach dem besten Weg, dies zu tun.
Ich würde gerne den Algorithmus des Malers vermeiden, da es dazu beinhaltet, alle Sprites jeden Rahmen zu sortieren, der teuer ist.
Der Z-Puffer-Algorithmus wird von der GPU und COCOS2D unterstützt, so dass ich das ist, was ich verwenden möchte, aber es gibt ein Problem. Einige Sprites, wie Gebäude zum Beispiel, besetzen mehrere Fliesen. Zuweisen eines Z-Werts an solche Sprites ist schwierig.
Dies sind die Optionen, von denen ich gedacht habe:
- .
- Vergleichen von zwei Gebäuden und Bestimmen, welcher "vorne" ist einfach. Es können also Gebäude sortiert werden, dann einen Z-Wert zugewiesen die Sortierreihenfolge Dies wäre nicht anders als der Maler Algorithmus. Der OpenGL ES Z-Puffer wäre nicht notwendig.
- Weisen Sie jedem Gebäude einen Z-Wert zu, der rein an seinem Standort an der Stelle basiert die Karte (ohne Kenntnis davon, wo andere Gebäude sind). Ich bin dieses schwierige finden Ich denke es ist möglich, aber ich war nicht gewesen in der Lage, noch eine Formel zu finden.
- Verwenden Sie mehrere Sprites für Bilder, die mehr als eine Fliese einnehmen, so Alle Sprites sind genau die gleiche Größe. Z-Bestellungen können dann sein leicht zugewiesen, basierend auf welcher Fliese ist der Sprite besetzt. Das Problem mit dieser Lösung ist, dass es die Spiellogik viel mehr macht kompliziert. Alle Operationen auf einem einzigen Gebäude müssen sein Für jeden Sprite wiederholt Das Gebäude besteht aus. Ich möchte Behandeln Sie jedes Objekt als einzelne Entität.
- Ändern Sie den COCOS2D-Code, damit Sprites mehrere Z-Werte aufweisen können
an verschiedenen Punkten. Wenn ein Sprite mehrere Z-Werte aufweisen kann
Welche Fliese fällt ein bestimmter Teil des Sprites auf, dann berechnen
Ein Z-Wert für diesen Abschnitt ist einfach. Ich muss das nicht vergleichen
Sprite zu anderen Spriten. Ich glaube, das ist möglich mit der Verwendung
Mehrere Quads für jeden Sprite. Das Problem damit ist, dass es ist
Ein bisschen kompliziert für mich, da ich neu in OpenGL ES und COCOS2D bin. ich
Verstehen Sie nicht vollständig, wie alle internen Datenstrukturen
Arbeit. Obwohl es die eleganteste Lösung ist, wenn eine Formel
kann nicht gefunden werden.
Ich werde alle Vorschläge oder Verweise auf hilfreiche Ressourcen aufwenden.
Lösung
Für # 2 können Sie den MANHATTAN-Abstand der Mitte des Objekts berechnen und diesen Wert als Z-Wert dieses Objekts verwenden.Es wird funktionieren, solange Sie sehr lange Objekte in Ihrer Karte vermeiden, wie 5x1 Objekt oder schlechter.Wenn Sie jedoch wirklich ein langes Objekt brauchen, um in einer gezillerten Karte aufzunehmen, kann man die Z-Reihenfolge der Objekte in der Karte verwalten, indem Sie einen Z-Wert mit einer Formel einstellen, wobei ein Z-Wert verwendet wird.
um das zu beweisen:
1.) Platzieren Sie zwei 2x2-Objekte in eine Karte horizontal und lassen Sie eine Einheitsfliese zwischen ihnen.Kummer
2.) Legen Sie ein 3x1-Objekt zwischen ihnen.Nennen Sie die 2x2-Objekte in A und B und dem 3X1-Objekt in C.
3.) Wenn Sie nur c drehen (nicht ändern), z-Reihenfolge des A- und B-Austauschs.
-if b ist jetzt vorne, einige Objekte hinter B sind vor einem, da nur die Rotation von C. und es ist kostspielig, zu wissen, welche Objekte in der Rückseite von A und B zuvor vor einemNach Cs Rotation.