2009-05-27 9 views
3

Ich suche nach Informationen, wie man 2D Sprites über eine isometrische Spielwelt bewegt (und animiert), aber ihre Bewegung während der Reise von Kachel zu Kachel im Gegensatz zu animiert wird wenn sie von den Grenzen einer Fliese zu den Grenzen der nächsten springen.Sprites bewegen zwischen Kacheln in einer isometrischen Welt

Ein Beispiel hierfür wäre das Transport Tycoon Game, bei dem die Züge und Wagen oft die eine Hälfte in der einen und die andere Hälfte in der anderen liegen.

Antwort

10

Das Zeichnen der Sprites an der richtigen Stelle ist nicht allzu schwierig. Die Projektionsformel ist:

screen_x = sprite_x - sprite_y 
screen_y = (sprite_x + sprite_y)/2 + sprite_z 

sprite_x und sprite_y werden Punktwerte festgelegt (oder Floating-Point, wenn Sie möchten). Normalerweise ist die Genauigkeit des Fixpunkts die Anzahl der Pixel auf einer Kachel. Wenn also Ihre Kachelgrafik 32x16 wäre (ein projiziertes 32x32 Quadrat), hätten Sie 5 Bits Genauigkeit, d. H. 1/32 einer Kachel.

Der wirklich schwierige Teil ist, die Sprites in eine Reihenfolge zu sortieren, die korrekt rendert. Wenn Sie OpenGL zum Zeichnen verwenden, können Sie einen Z-Puffer verwenden, um dies wirklich einfach zu machen. Mit GDI, DirectX usw. ist es wirklich schwierig. Transport Tycoon gibt die Sprites nicht in allen Fällen korrekt wieder. Der ursprüngliche Transport Tycoon hatte die schrecklichste Rendering-Engine, die Sie jemals gesehen haben. Es implementiert die drei Zoomstufen sind drei Instanziierungen eines massiven masm-Makros. TT wurde komplett in Assembler geschrieben. Ich weiß, weil ich es vor vielen Jahren auf den Mac portiert habe (und eine coole Version für das PS1-Entwicklungskit gemacht habe, obwohl es 6 MB benötigt).

P.S. Eine der kleinen Bungalowgrafiken im Spiel basierte auf dem Haus, in dem Chris Sawyer zu der Zeit lebte. Wir waren versucht, einen in der Einfahrt geparkten Ferrari für die Mac-Version hinzuzufügen, denn das war das Auto, das er mit den Lizenzgebühren gekauft hatte.

0

Warum denken Sie, dass es von Kachel zu Kachel springt? Sie können Ihr Sprite an einer beliebigen x, y-Koordinate positionieren.

Zuerst erstellen Sie Ihren Hintergrund Bildschirm Puffer und legen Sie Ihre Sprites oben drauf.

4

Schauen Sie, wie Sie lineare Interpolation (es ist eine ziemlich einfache Formel). Sie können dies verwenden, um den Übergang für einen einzelnen [0, 1] -Bereich zu parametrisieren. Sie haben dann einfach einen Zustand, in Sprites, die Fakten zu speichern:

  1. Dass sie
  2. Start- und Endpunkte
  3. Start- und Endzeiten bewegen (oder Startzeit und Dauer

und dann kann jeder Rahmen an der richtigen Position gezeichnet werden, wobei eine Interpolation vom Startpunkt bis zum Endpunkt verwendet wird.Wenn die Dauer überschritten ist, wird das Sprite aktualisiert, um sich nicht zu bewegen und im Endpunkt/Kachel positioniert zu werden.