Soll ich die Welt bewegen oder den Spieler bewegen?


11

Ich bin dabei, ein Side-Scrolling-Spiel zu entwickeln, bei dem der Spieler vor dem Aufsetzen so weit wie möglich in der horizontalen Achse fahren soll. Beachten Sie, dass ich niemals auf der horizontalen Achse zurückfahren muss.

Ich entwickle dies mit der AndEngine für Android, die OpenGL und Box2d verwendet.

Bevor ich anfange, muss ich mich für etwas Wichtiges entscheiden: Soll ich die Welt um den Spieler herum nutzen, um Bewegungen zu simulieren, oder den Spieler tatsächlich bewegen und ihm mit den Kamerafunktionen der Spiel-Engine folgen?

Beide Ansätze scheinen unterschiedliche Stärken und Rückschläge zu haben, daher weiß ich nicht, welcher als der beste angesehen wird. Was würde es zum Beispiel einfacher machen, unterwegs Power-Ups hinzuzufügen und einen schönen animierten Hintergrund zu haben?

Vielen Dank!


2
Bewegen Sie die Kamera.
Jonathan Dickinson

1
Sofern Sie keinen bestimmten Grund haben, die Kamera (die bereits für Sie geschrieben wurde) nicht verwenden zu wollen, sollten Sie den Player und die Kamera bewegen. Das Hinzufügen von "Power-Ups" sollte in keiner Weise beeinflusst werden.
Christopher Horenstein

Antworten:


9

Bewegen Sie die Kamera (an Ihrem Player angebracht). Ich würde mir vorstellen, dass Ihre Welt mehrere Objekte wie Feinde hat. Wenn Sie die Welt bewegen würden, müssten Sie alle diese Objekte durchlaufen, um ihre Positionen jedes Mal zu aktualisieren, wenn sich die Welt bewegt.

Wenn Sie den Player bewegen und die Kamera an den Player anschließen, ist der Ressourcenverbrauch minimal. Das Spiel erreicht seine Renderphase, durchläuft alles einmal wie jedes Bild und zeichnet es an Position - camera.position. Die Kameraposition entspricht in diesem Fall immer der Position Ihres Spielers.


Wenn die Objekte Feinde sind, müssten Sie sie natürlich nicht durchlaufen, sondern nur die Bewegung der Welt in ihrer Aktualisierungsmethode zu ihrer hinzufügen.
SirYakalot

1
+1. Verwenden Sie camera.setChaseEntity(player);, um dies zu erreichen.
MartinTeeVarga

6

Ich bewege die Kamera immer und würde sie empfehlen - es gibt viele Gründe, warum ich das bevorzuge, aber das Wichtigste läuft wahrscheinlich darauf hinaus:

  1. Wenn Sie die Kamera und den Player bewegen , müssen nur zwei Objekte aktualisiert werden, um den Bildschirm zu scrollen.

  2. Wenn Sie die ganze Welt verschieben, wann immer der Bildschirm gescrollt werden muss, umfasst dies eine unbekannte und möglicherweise große Anzahl von Entitäten , die aktualisiert werden müssen.


Ich stimme zu, aber ich würde hinzufügen, dass es ziemlich trivial wäre, einfach eine Linie + = 'der Weltbewegung zur feindlichen Klasse hinzuzufügen.
SirYakalot

@AsherEinhorn Ich nehme an, Sie sprechen von einem Szenario wie einem Szenendiagramm, in dem jeder Knoten die Transformationen der Eltern teilt und durch einfaches Verschieben des Stammknotens (dh der "Welt") alles andere automatisch übersetzt wird. Denn in jedem anderen Fall bedeutet das Bewegen der Welt, alles in der Welt zu bewegen - das war der Punkt meines Beitrags.
David Gouveia

gut, wenn die Bewegung der Welt umgekehrt proportional zum Spieler ist. dh - du bewegst dich vorwärts, die Welt bewegt sich zurück, dann könntest du einfach - = die Bewegung des Spielers zu allen Spielobjekten. Ich stimme Ihnen zu. Ich sage nur, dass es triviale Möglichkeiten gibt, beide zum Arbeiten zu bringen.
SirYakalot

4

Es ist wirklich ziemlich trivial, es macht keinen Unterschied zu den Dingen, die Sie beschrieben haben.

Entweder bewegen Sie den Hintergrund an der Kamera und dem Player vorbei oder Sie bewegen den Player und die Kamera mit sich. Ich nehme an, es gibt eine Sache weniger zu tun, wenn Sie nur den Hintergrund verschieben.

Obwohl ich nehme an, wenn Sie den Hintergrund verschieben, müssen Sie alle Pickups und Feinde dazu überreden, was wiederum trivial ist, aber es ist etwas, worüber Sie nachdenken müssen.

Persönlich würde ich den Spieler bewegen, weil ich es einfach mag, wenn die Dinge realistischer gemacht werden.


0

Andere Antworten sind gut, aber ich möchte ein paar Punkte hinzufügen, was besser ist, in der Hoffnung, jemandem zu helfen, der versucht, die gleiche Entscheidung für ein anderes Projekt zu treffen.

Spieler bewegen:

  • Es ist einfach, alles andere ist statisch (ish). Vereinfacht ausgedrückt ist das einzige, was Sie tun müssen, um den Player zu bewegen, player.x += 5;(Pseudocode).
  • Es "klickt besser" für die meisten Menschen. Wenn Sie ein Spiel spielen, denken Sie immer, dass sich der Spieler bewegt, nicht umgekehrt. Es ist also einfacher, sich das als "Der Spieler sollte sich bewegen, nicht die Welt" vorzustellen, was es wiederum für jemanden einfacher machen kann, es in ihren Köpfen zu organisieren.
  • Einfach zu verfolgen, wo sich der Spieler befindet (seine Position ist auch seine Koordinaten auf der Karte)

Die Welt bewegen:

  • Wenn Ihr Spiel groß genug ist, müssen Sie sich keine Gedanken über Überlauf / Unterlauf machen, indem Sie sich zu weit vom Zentrum der Welt entfernen, da die Position des Spielers immer sehr nahe ist 0.
  • Ähnlich wie oben müssen Sie sich bei 3D-Berechnungen keine Gedanken über ungenaue Ergebnisse mit Gleitkommawerten machen, da alles, was Sie auf dem Bildschirm sehen, ziemlich nahe beieinander liegen sollte 0.
  • Wenn es richtig gemacht wird, können Sie eine "unendliche" Welt erschaffen.
  • Müssen Sie den Spieler manuell verfolgen, ist die Position des Spielers immer ein kleiner Wert, der angibt, wo sich der Spieler auf dem Bildschirm befindet (irgendwie), um zu wissen, ob sich der Spieler oben links auf der Karte oder unten rechts befindet. Sie müssten das irgendwie im Auge behalten.

Letztendlich kommt es auf das Projekt an. Wenn jemand einen originalen Mario-Klon erstellt, kann das Verschieben der Welt kompliziert sein, während das Verschieben des Players nicht wirklich viele Probleme verursacht. Wenn Sie jedoch ein riesiges Open-World-Spiel machen möchten, ist es möglicherweise besser, stattdessen die Welt zu bewegen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.