Ergebnis 1 bis 3 von 3

Thema: Tile-Engine

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Tile-Engine

    Hiho!
    So ich glaub ich erzähl erstmal was bevor ich zu meinen problemen komm.

    Ich bastel grad an einer kleinen 2D-Tile-Engine für RPGs. Ich habe den Core für die Engine aus dem "Programming Role Playing Games with DirectX" von Jim Adams genommen und ihn erstmal auf 2D-Spiele gestutzt und das ganze 3D zeugs rausgeschmissen und dann den Code natürlich auf DirectX 9.0 convertiert.
    Dann hab ich schonmal einiges an Code geschrieben usw.. blos jetzt bin ich an einem Problem angekommen:

    Wenn ich einen Character auf dem Monitor in der Gegend rumlaufen lassen will.. wie mach ich das? Also die Richtung kann ich ja ganz einfach über ne Geradensteigung festlegen.. aber wie mach ich dann weiter?

    Klar.. wenn ich die Steigung von 1 hab is klar dass ich den Char dann eine Einheit weiter nach Oben und nach Rechts schick (unter der Vorraussetzung dass ich ihn nach Rechts schicken will) aber wie mach ich wenn ich ne Steigung von 0.198 oder von 0.988 oder sowas mal rausbekomm?

    Meine zweite frage wäre dann: wie kann ich die Bewegung der Chars noch mit der Geschwindigkeit verändern? Ich meine wie soll ich die Variable in die Bewegungsberechnung mit reinbringen? Wenn ich sage Grundgeschwindigkeit ist 1 und es mit der Anzahl der Einheiten die der Char verschoben wird multipliziere (also zB. eine Einheit nach Oben * 1 [<-- Geschwindigkeit]) dann kommt ja nix gutes bei raus weil die nächste größe wäre dann 2 statt 1, also die Chars würden doppelt so schnell laufen. Aber wenn das wieder zu schnell ist? Wenn man als speed 1.5 sagen würde würde der Char 1.5 Einheiten nach Oben gehen.. aber wie will ich 0.5 Einheiten darstellen?? Wenn ich runden würde könnt ich ja gleich den speed auf 2 setzen.. kann mir da jemand noch nen tipp geben?

    schonmal vielen dank
    ich meld mich ncohmal wenn ich ne frage hab.. und natürlich halte ich euch auf dem laufenden ^^

  2. #2
    Du mußt über einen Vektor arbeiten. Momentan arbeitest du mit einem skalaren Wert, der die Richtung angibt. Ein Vektor beinhaltet Informationen über die Richtung und die Geschwindigkeit.
    An sich kannnst du den Vektor aus zwei Richtungsangaben zusammensetzen. Beispielsweise bedeutet der Vektor (1, 1), daß du eine Einheit nach oben und eine nach rechts gehst; (-2, 5) würde bedeuten, daß du zwei Einheiten nach links und fünf nach oben gehst.

    Was die Sache mit den Kommawerten angeht: Wenn du pixelgenaue Bewegungen unterstützt könntest du einfach auf den nächsten Pixel runden (entweder gleich bei der Bewegung oder später bei der Anzeige*). Wenn du nur tileweise Bewegungen zuläßt solltest du erst mal generell auf ganze Tiles runden.


    * Ob es Sinn macht, intern mit sub-Pixel-Einheiten zu arbeiten, mußt du selbst entscheiden. Ein Spiel, das sowas macht (warum auch immer), wäre Super Metroid, wo die Position auf 1/65535 Pixel genau verarbeitet wird.

  3. #3
    Wenn du Wert auf die Winkel legst, kannst du alternativ auch die Richtung in Grad angeben und dann mit Sinusfunktionen arbeiten.

    Code:
    x += cos(angle) * speed;
    y += sin(angle) * speed;
    (Vorausgesetzt ein Winkel von 0° entspricht einer Bewegung nach rechts und 90° einer Bewegung nach unten)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •