Spieler soll sich Tileweise bewegen... wie?
Übersicht

![]() |
KlipBetreff: Spieler soll sich Tileweise bewegen... wie? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() Mfg Ebola |
||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, die Sache funktioniert wunderbar.
Hast mir sehr geholfen, vielen Dank. |
||
![]() |
Ebola33 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nix zu danken. | ||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
Ebola33 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, da hatte ich mich auch schon gefragt, was es davor bringen soll.
Trotzdem danke für den Tipp, werde ich beherzigen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group