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:

    .
  1. 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.
  2. 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.
  3. 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.
  4. Ä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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top