Spieler soll sich Tileweise bewegen... wie?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Klip

Betreff: Spieler soll sich Tileweise bewegen... wie?

BeitragMo, Feb 21, 2005 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag,

ich befasse mich im Moment mehr zum Spaß an einem kleinen Projekt. Nun hätte ich gerne, dass sich meine Spielfigur jede Runde (Rundenbasiert) eine bestimmte Strecke bewegen kann. Sagen wir, 7 Pixel oder 7 Tiles, wie ihr wollt.

user posted image

Die Wegstrecke (WS) darf also maximal 7 Pixel oder Tiles lang sein; weiter darf sich der Spieler nicht bewegen. Kürzer allerdings schon, wenn das gewohnt ist. Sagen wir, wie beim Schach, der Turm. Man kann mit ihm so weit gehen, wie man mag, jedoch ohne die Richtung zu wechseln oder ein Hindernis zu durchqueren.

Genau so soll es meine Figur halten. Allerdings habe ich ein Problem: Der Turm kann sich in vier Richtungen bewegen. Wie lasse ich den SP eine WS ablaufen, die eine bestimmte Entfernung beträgt, auch in negative Richtung?

Mein erster Versuch war es, die aktuelle Position in zwei Variablen zu speichern und dann die Bewegungspunkte (7 Tiles/Pixel) dazu zu addieren. Übersteigt die neue Position diesen Wert, ist der "Zug" ungültig.

Soweit noch verstanden.
Kommen allerdings noch drei andere Richtungen dazu, verstehe ich nicht mehr, wie ich dies bewerkstelligen soll.

Ich bitte um Denkanstösse in diese Richtung. Wie kann man dieses Problem lösen?

Ebola33

BeitragDi, Feb 22, 2005 2:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Klip,
Code: [AUSKLAPPEN]
Graphics 800,600,16,0
SetBuffer BackBuffer()

Spieler_X  = 400  ; X Koordinate des Spielers
Spieler_Y  = 300  ; Y Koordinate des Spielers
Max_Strecke= 100  ; Maximale Strecke

While Not(KeyHit(1)) ; Hauptschleife
   Cls
   MX=MouseX()
   MY=MouseY()

   ; Zuerst den winkel zum ziel berechnen (hier maus)
   Winkel = ATan2(Spieler_X -MX,Spieler_Y -MY )+180

   ; Dann den Abstand zum Ziel berechnen (wieder maus)   
   Abstand = Sqr(((MX-Spieler_X) ^ 2) + ((MY-Spieler_y) ^ 2))

   ; Jetzt fragen ob der Abstand kleiner ist als der Maximal erlaubte Weg

   If Abstand <Max_Strecke Then

      ;Dann Koordinaten dem Ziel übergeben
      Weg_Strecke_X=MX
      Weg_Strecke_y=MY

   Else ; Sollte der Abstand grösser als erlaubt sein dann begrenzen

      ; jetzt die maximale Wegstrecke den Funktionen Sin & Cos als Radius übergeben

      Weg_Strecke_X=Spieler_X+Sin(winkel)*Max_Strecke
      Weg_Strecke_Y=Spieler_Y+Cos(winkel)*Max_Strecke

   EndIf
   ; fertig ;-)


   Text Spieler_X,Spieler_Y,"SP"
   Text Weg_Strecke_X,Weg_Strecke_Y,"WS"
   Text MX,MY,"ZP"
   Text 10,10,winkel
   Text 10,30,abstand
Flip
Wend


Ich hoffe ich habe deine Frage richtig verstanden und konnte dir helfen.

edit : hmmm...man hätte das auch einfacher lösen können. Wolltest ja nur 4 Richtungen, aber so hast du wenigstens alle. Wink

Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Klip

BeitragDi, Feb 22, 2005 8:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Och, die Sache mit den Richtungen ist nicht so schlimm.

Ich muss jetzt in die Schule. Mann, ich kenne wirklich noch lange nicht alle Befehle ^^
Dann darf ich gleich erstmal bei Blitzbase Atan und Sqr erkunden.

Vielen Dank, ich probiere es gleich heute Nachmittag einzubauen.

Klip

BeitragDi, Feb 22, 2005 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
So, die Sache funktioniert wunderbar.

Hast mir sehr geholfen, vielen Dank.

Ebola33

BeitragDi, Feb 22, 2005 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Nix zu danken.
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Ebola33

BeitragMi, Feb 23, 2005 4:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hi klip,
mir fällt gerade auf is ja mumpitz. Du musst den Winkel natürlich nur berechnen wenn der Abstand grösser ist als erlaubt.
Hat in diesem Beispiel warscheinlich keine Performance Einbussen aber bei mehreren Ojekten würde das an der Geschwindigkeit nagen.
Also den Winkel auch nur nach dem else berechnen.
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Klip

BeitragMi, Feb 23, 2005 8:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, da hatte ich mich auch schon gefragt, was es davor bringen soll.

Trotzdem danke für den Tipp, werde ich beherzigen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group