Problem mit einer Bewegungsroutine
Übersicht

![]() |
ChrissaBetreff: Problem mit einer Bewegungsroutine |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute!
Ich bin gerade dabei eine Bewegungsroutine für den Spieler zu schreiben. Wenn ich irgendow hinklicke soll er sich automatisch dorthin bewegen. Die Bewegung ist aber noch nciht ganz rund und der "Spieler" bewegt sich nicht auf der Diagonale des Rechtecks, das sich bei der Bewegung ergibt... Hier der Code: BlitzBasic: [AUSKLAPPEN] Graphics 800,600,0,0 |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne mir jetzt genau angeschaut haben, wie du die Bewegung realisierst: Mir sind 2 Tippfehler aufgefallen( jedenfalls sieht es so aus, als wären es welche):
BlitzBasic: [AUSKLAPPEN] If player_x=player_x_new And player_y_player_y_new ;ursprünglich BlitzBasic: [AUSKLAPPEN] Line player_x,okayer_y,player_x_new,player_y_new ; und das ... In diesen Fällen werden von BB intern die Variablen "okayer_y" und "player_y_player_y_new" definiert und du wirst gar nicht vom Compiler gewarnt. Das Problem mit der unrunden Bewegung habe ich auch noch nicht gelöst, aber ich denke, dass es was mit Winkelfunktionen zu tun haben könnte. mfg Thunder Edit: Ich schau mir gleich die ganze Routine an. Edit2: Darth war zu schnell. Wichtig ist aber, dass du BlitzBasic dazu bringst Float zum Berechnen zu verwenden. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
- Zuletzt bearbeitet von Thunder am Di, März 23, 2010 14:08, insgesamt 2-mal bearbeitet
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja diese Fehler sind mir auch aufgefallen. SInd im jetzigen Code verbessert. Die Probleme sind aber immer noch die gleichen... Der Code ist ja auch so, dass ihn jeder mal ausprobieren kann. So könnt ihr vll mein Problem besser verstehn ![]() Aber danke, dass du so genau hinschaust ![]() |
||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Wenn du eine geradlinige Bewegung willst dann macht man das meistens so: A = Spielerposition B = Zielposition v = Geschwindigkeit Zuerst die Richtung: Code: [AUSKLAPPEN] Dx# = Bx# - Ax#
Dy# = By# - Ay# Jetzt weiss man, in welche er gehen soll. Allerdings wäre er jetzt in einem Schritt dort. Nun kann man entweder eine konstante Geschwindigkeit (v = const), oder eine Zeit für die Bewegung angeben (v=s/t). Damit der Spieler auch linear bewegt wird, muss man den D Vektor normalisieren. Code: [AUSKLAPPEN] L# = Sqr(Dx*Dx + Dy*Dy) ;das ist übrigens auch die Länge der Strecke
Dx = Dx/L * v ;Strecken mit der Geschwindigkeit Dy = Dy/L * v Jetzt weiss man die Schrittweite. Also kann man nun den Spieler bis zum Erreichen des Ziels bewegen. Code: [AUSKLAPPEN] While Not AtDestination
PlayerX = PlayerX + Dx PlayerY = PlayerY + Dy Und das wäre schon alles. MfG, Darth |
||
Diese Signatur ist leer. |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm stimmt das so? wenn ja dann geht es nich...
BlitzBasic: [AUSKLAPPEN] AppTitle "test" PS: Vektoren machen wir erst nächstes Jahr. Deshlab hab ich das nur zur Hälfte verstanden... EDIT: Wie sich mit DebugLog herusstellte, bleibt x und y immer 0. Nur den Fehler, warum das so ist, finde ich nicht... EDIT 2: Gelöst: Das problem war, dass x und y als Integer definiert waren, nicht als doubles. Warum es nicht mit Integers geht weiß ist mir unklar... Das neue Problem: Bei jeder 2. Bewegung fängt der "Spieler an zu wackeln... Einen Toleranzbereich einzustellen geht nicht, da sonst die Bewegung dauerhaft ausgeführt wird... |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn der Spieler im Toleranzbereich ist stellst Du ihn einfach au fdie entsprechende Fixposition. | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
hat jemadn eine Idee wie ich dieses Gewackel, das ich jetzt habe abstellen kann? Code ist oben gepostet...
Und die zweite Sache: Geht das ganze auch flüssiger? Denn im Moment ruckelt mein "X" in der Gegend rum... Danke schon mal für die Hilfe. LG Chrissa EDIT: Ich kann eben keinen Toleranzberiche einstellen. Sonst bewegt er sich ja immer weiter... Und noch was: der Wert, den ich addiere, ruckelt zwischen 3 und 3.0000?! Das ist dch das selbe oder ist letzteres einfach minimalst größer/kleiner? |
||
![]() |
Pokoyo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, bitte folgenden Code einmal verinnerlichen :
Code: [AUSKLAPPEN] Graphics 800,600,32,0
SetBuffer BackBuffer() Global PW#;winkel Global PV#=0.5;geschwindigkeit Global PX#,PY#,ZX#,ZY# ; Player/Ziel Koordinaten While Not KeyDown(1) Cls If MouseHit(1) ZX# = MouseX() ZY# = MouseY() PW# =ATan2(PX#-ZX#, PY#-ZY#) EndIf If Int(px)<>Int(zx) Or Int(py)<>Int(zy) ; Ziel noch nicht erreicht PX#=PX#-Sin(PW#)*PV# PY#=PY#-Cos(PW#)*PV# EndIf Text px,py,"Player" Text zx,zy,"Ziel" Text MouseX(),MouseY(),"Mouse" Flip Wend mfg Pokoyo ![]() edit: Es hat sich ein Fehler eingeschlichen... |
||
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax| |
- Zuletzt bearbeitet von Pokoyo am Mi, März 24, 2010 22:29, insgesamt 2-mal bearbeitet
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Beispiel mit stark übertriebenen Werten:
Toleranz = +/- 2 Code: [AUSKLAPPEN] if spieler_rennt_rum then
if pos_ist > pos_ziel - 2 and pos_ist < pos_ziel + 2 then pos_ist = pos_ziel spieler_rennt_rum=false endif endif Oder meintest Du etwas ganz anderes? Dann vergiss den Quatsch einfach ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
@pokoyo: Die Routine funktioniert nicht ganz. Es kommt vor, dass der Spieler über das Ziel hinaus schießt... Würde es gerne über Winkelfunktionen machen, aber das ist mir noch etwas zu hoch bzw. ich verstehs noch nicht so ganz...
@Hubsi: Ich habe jetzt mal einen minimalen Spielraum von 0,0001 reingemacht und auch mal auf 0,001 vergrößert, aber das bringt leider nichts... |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst ja "cheaten" und sagen , dass wenn der Abstand x und y jeweils in einem bestimmten Bereich ist, dass dann der Gamer automatisch ans Ziel versetzt wird. ![]() |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nutze darths Lösungs und erweitere sie leicht:
BlitzBasic: [AUSKLAPPEN] If aktuellerAbstand>GrößeDerGeschwindigkeit Das Verstehen von darths Code kommt bestimmt noch. ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
habe ich gemacht, aber er hopst immer noch rum!?!
Hier der Code: BlitzBasic: [AUSKLAPPEN] AppTitle "test" |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stichwort : Pythaguras
Wurzel ( xabs² + yabs² ) = Abstand von 2 Punkten |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deine Strecke ist kein Float - das kann beim teilen und multiplizieren unangenehm auffallen.
Edit: Und um Glatte Bewegungen zu bekommen, müssen die Positionen auch Nachkommastellen bekommen: BlitzBasic: [AUSKLAPPEN] AppTitle "test" |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am Do, März 25, 2010 15:19, insgesamt einmal bearbeitet
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
@TimBo: Soll ich das dann da einfügung wo Strecke berechnet wird? Im Prinzip ist das ja aber das selbe...
@Xeres: Ist jetzt ein Float, ändert aber nichts. @all: Er ruckelt jetzt nicht mehr. Nur die Bewegung ist so gesamt unflüssig. Liegt das an der Art, wie ich das mache oder kann man da noch etwas optimieren? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group