2d Top-Down-Karte: Normalisierung oder nicht?


11

Ich bin ein absoluter Anfänger in der Spielprogrammierung. Sollte diese Frage schlecht formuliert sein, sei mir bewusst, dass es nicht Schlamperei an meiner Seite war, sondern mangelnde Erfahrung in der Spielprogrammierung.

Das Spiel, das ich programmieren möchte, verwendet eine 2D-Karte von oben nach unten als "Welt". Die Welt ist möglicherweise größer als das Fenster (das Fenster kann vergrößert oder verkleinert werden) und die Fahrzeuge können sich an jedem Punkt der Welt befinden (= es ist keine gekachelte Karte, der Raum ist "durchgehend").

Um dies anhand eines Beispiels zu verdeutlichen: Wenn die Welt ein Gelände von 1000 x 1000 Metern ist, könnte sich ein Fahrzeug an einem Ort (327,31, 720,4) Meter befinden.

Meine Frage ist: Was ist der bequemste Weg, die Welt intern darzustellen? Ich könnte über diese Möglichkeiten nachdenken:

  • Tu nichts und benutze Messgeräte, als würde ich mit dem physischen Objekt arbeiten.
  • Normalisieren Sie auf Pixel , die die Weltgröße als die Anzahl der Pixel definieren, um 1000 Meter bei maximalem Zoom darzustellen.
  • Normalisieren Sie auf 1 und definieren Sie das Wort als Quadrat der Größe 1

... aber ich bin mir sicher, dass es einige andere geben könnte / einige von mir könnten keinen Sinn ergeben. Es ist nur so, dass ich als mein erstes Spiel keine klaren Bilder von den Problemen vor mir habe und ich möchte eine Anleitung, wie ich eine einigermaßen korrekte erste Wahl treffen kann.

Vielen Dank für Ihre Zeit.


Ich hatte dieses Problem. Ich werde nicht als Antwort posten - da gibt es schon großartige Sachen. Wenn Sie jedoch in einer beliebigen Einheit arbeiten, können Sie jede Auflösung unterstützen, indem Sie nur einen einzelnen Wert anpassen. Es ist auch viel einfacher, mit dem Gameplay umzugehen. Schließlich können bei großen Zahlen wie Pixelmessungen Physiksimulationen explodieren.
Die kommunistische Ente

Antworten:


10

Ich bin damit einverstanden, einen realen Wert (Meter, Fuß usw.) als Grundlage für die Entfernung zu verwenden. Das Problem mit Ihren beiden anderen Vorschlägen ist, dass beide Variablen sind. Wenn Sie mit einer Weltgröße von arbeiten, 1wird Ihre gesamte Arithmetik zwischen Gleitkomma zwischen -1 und 1 liegen, was zu mehr Gleitkommafehlern führen kann. Sollten Sie sich jemals dazu entschließen, variable Weltgrößen zu erstellen ("große" Welten für längere Spiele usw.), werden Sie viele Probleme mit Ihrem Code haben. Wenn Sie Pixel verwenden, selbst bei maximaler / minimaler Zoomstufe, treten Verwirrung und Probleme auf, wenn Sie die Zoomstufe erhöhen oder verringern.


Diese Antwort ist ausgezeichnet (+1). Mir gefällt besonders, wie Sie die möglichen Probleme bei der Verwendung von "1" für die Größe der Welt erklärt haben.
Randolf Richardson

Wenn Sie irgendeine Art von physikalischer Simulation durchführen, selbst wenn diese vollständig erfunden ist, führt die Verwendung von Festkomma-Ganzzahlen zu ungültigen Ergebnissen. Alles, was Sie tun müssen, ist ein einzelnes Fahrzeug zu modellieren, das sich mit Einheitsgeschwindigkeit auf der Diagonale bewegt, und Sie werden feststellen, dass Sie keine Möglichkeit haben, seine Position richtig darzustellen.
edA-qa mort-ora-y

3
Vereinbarte RE: mit Zählern. Es wird Ihnen auch helfen, Dinge mental zu visualisieren und zu verstehen. "Dieses Fahrzeug ist 5 Meter lang" oder "Diese beiden Objekte sind 500 Meter voneinander entfernt" und müssen nicht die ganze Zeit mental rechnen, um ein Gefühl dafür zu bekommen, was Sie tun.
Tim Holt

-1 Diese Aussage, dass Ganzzahlarithmetik schneller als Gleitkomma ist, ist im Allgemeinen nicht wahr, tatsächlich sind sie auf den meisten modernen Plattformen viel schneller
Maik Semder

2
Die Verwendung von Festpunktwerten für absolute Positionen kann dennoch eine gute Idee sein. Dies führt zu konstanter Präzision und identischer Physik auf der ganzen Welt.
CodesInChaos

7

Von den drei von Ihnen vorgeschlagenen Optionen ist die Verwendung von Messgeräten wahrscheinlich die beste. Wenn Sie andere Daten erstellen, erleichtert Ihnen der Umgang mit der Länge in Metern das Leben erheblich. Unter anderem können Sie sich entscheiden, Ihre Weltgröße zu ändern, oder verschiedene Ebenen benötigen möglicherweise Karten unterschiedlicher Größe.

Sie können auch Füße (oder möglicherweise Zoll) verwenden. Ein Teil dieser Entscheidung hängt möglicherweise davon ab, welche Middleware-Pakete Sie verwenden. Einige Physik-Engines bevorzugen den einen oder anderen Einheitentyp (obwohl er fast immer konfigurierbar ist). Zum größten Teil können Sie einfach eine Einheit auswählen und mitmachen.


5

Auf '1' zu normalisieren ist wirklich nicht der richtige Weg (was ist, wenn Sie eine Welt haben, die nicht quadratisch ist? Oder mehrere Welten mit unterschiedlicher Größe ...).

Verwenden von Pixeln als ... NIEMALS Gameplay und grafische Maßnahmen verwechseln !! Schließen Sie sich nicht ein, damit Sie die Grafiken nicht ändern können, ohne den Code ändern zu müssen.

Meter (Fuß oder was auch immer Sie am meisten mögen) ist der richtige Weg. Sie werden sich viel besser fühlen, wenn Sie Ihren Raketenwerfer so codieren, dass er sich mit 50 km / h bewegt, als mit 0,00076 Einheiten / Sekunde ...

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.