GTA Steuerung wenn wird zu schnell?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: GTA Steuerung wenn wird zu schnell?

BeitragMo, Okt 26, 2009 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.
Nem Kumpel von mir ist folgendes aufgefallen:
Wenn man bei meinem Spiel gleichzeitig grade aus und links bzw rechts fährt, dann wird der Spieler extrem schnell.
Ich wüsste aber nicht wie ich es ändern könnte:

Code: [AUSKLAPPEN]
Spieler\PWinkel#=ATan2(-MouseX3D,-MouseY3D) ;Blickrichtung



 ;Geradeaus
   If KeyDown(17) Then
      Spieler\Px=Spieler\Px-Sin(Spieler\PWinkel)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py-Cos(Spieler\PWinkel)*Spieler\PGeschw#
   EndIf
   
   ;Links
   If KeyDown(32) Then
      Spieler\Px=Spieler\Px-Sin(Spieler\PWinkel+90)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py-Cos(Spieler\PWinkel+90)*Spieler\PGeschw#
   EndIf
   
   ;Rechts
   If KeyDown(30) Then
      Spieler\Px=Spieler\Px+Sin(Spieler\PWinkel+90)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py+Cos(Spieler\PWinkel+90)*Spieler\PGeschw#
   EndIf
   
   ;Nach hinten
    If KeyDown(31) Then
      Spieler\Px=Spieler\Px+Sin(Spieler\PWinkel)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py+Cos(Spieler\PWinkel)*Spieler\PGeschw#
   EndIf


Kann mir vielleicht jemand helfen, also, dass der SPieler nicht schneller wird als sonst?

Lg, M0rgenstern

Tennisball

BeitragMo, Okt 26, 2009 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte es so gelöst:

(nicht getestet)
Code: [AUSKLAPPEN]
local winkel#, speed#, posx#, posy#
PosX=PosX-cos(winkel)*speed
PosY=PosY+sin(winkel)*speed


Aber ich weiß nicht ob es das bringt.

Edit:
Bei nach rechts bzw. links fahren natürlich "winkel#" entsprechend verändern.

M0rgenstern

BeitragMo, Okt 26, 2009 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab den COde extra mitgeschickt.
Da stehts ja genauso drin^^

Tennisball

BeitragMo, Okt 26, 2009 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm... Das kommt dann wohl daher, dass du das Auto (or whatever) durch zwei dieser Dinger durchjagst, also hast du auch die doppelte Geschwindigkeit. Vermute ich mal, keine Garantie, dass es auch wirklich so ist.
 

da_poller

BeitragMo, Okt 26, 2009 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Die bewegungs routine kann wegen der 4 if-endif mehrmals aufgerufen werden. Entweder du verwendert select-case oder if-elseif-endif.

M0rgenstern

BeitragMo, Okt 26, 2009 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
???
Da sind kommentare bei.
Außerdem sind es vier verschiedene Abfragen.
Für jede Richtung eine.
 

da_poller

BeitragMo, Okt 26, 2009 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit. Doppelt abgesendet.

Thorsten

Betreff: Re: GTA Steuerung wenn wird zu schnell?

BeitragMo, Okt 26, 2009 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
M0rgenstern hat Folgendes geschrieben:
Wenn man bei meinem Spiel gleichzeitig grade aus und links bzw rechts fährt,

Genau, für jede Richtung eine, und da du in diesem Fall zwei mal die Geschwindigkeit zur X und Y Koordinate hinzuaddierst, wird er eben doppelt so schnell.

Nur btw, du wendest Atan2 falsch an. (Zuerst Delta Y, dann Delta X)
Aber du scheinst die Richtungen später wieder zu tauschen, deswegen macht sich das wohl nicht bemerkbar..

M0rgenstern

BeitragMo, Okt 26, 2009 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, warum das so ist, ist mir bewusst, aber wie kann ich das ändern? Ich hab mal ne Abfrage eingebaut wenn beides gedrückt wird und hab dann nur die hälfte der Geschwindigkeit zugefügt aber das funktionierte nicht.

Atan2 benutz ich schon richtig. ist Draw3D.

Lg, M0rgenstern

Tennisball

BeitragMo, Okt 26, 2009 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach es doch so, wie ich es oben geschrieben habe.

TimBo

BeitragMo, Okt 26, 2009 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

das erste das mir aufgefallen ist
bei x benutzt man cos und bei y sin

mehr kann ich gerade nicht finden muss auch weg

Grüße
TimBo

So müsste das mit dem Speed gehen

BlitzBasic: [AUSKLAPPEN]

anzahl_tasten=KeyDown(17)+KeyDown(30)+KeyDown(31)+KeyDown(32)

;In den If abfragen
Spieler\Px=Spieler\Px-Sin(Spieler\PWinkel)*(Spieler\PGeschw#/ anzahl_tasten)
Spieler\Py=Spieler\Py-Cos(Spieler\PWinkel)*(Spieler\PGeschw#/ anzahl_tasten)
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.
  • Zuletzt bearbeitet von TimBo am Mo, Okt 26, 2009 17:10, insgesamt 3-mal bearbeitet
 

da_poller

BeitragMo, Okt 26, 2009 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nachdem wohl niemand meinen vorschlag oben gelesen hat hier der vorgekaute fertige code für dich nicht denken woller:

Code: [AUSKLAPPEN]
pieler\PWinkel#=ATan2(-MouseX3D,-MouseY3D) ;Blickrichtung



 ;Geradeaus
   If KeyDown(17) Then
      Spieler\Px=Spieler\Px-Sin(Spieler\PWinkel)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py-Cos(Spieler\PWinkel)*Spieler\PGeschw#
   EndIf
   
   ;Links
   ElseIf KeyDown(32) Then
      Spieler\Px=Spieler\Px-Sin(Spieler\PWinkel+90)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py-Cos(Spieler\PWinkel+90)*Spieler\PGeschw#
   
   
   ;Rechts
   ElseIf KeyDown(30) Then
      Spieler\Px=Spieler\Px+Sin(Spieler\PWinkel+90)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py+Cos(Spieler\PWinkel+90)*Spieler\PGeschw#
   
   
   ;Nach hinten
    ElseIf KeyDown(31) Then
      Spieler\Px=Spieler\Px+Sin(Spieler\PWinkel)*Spieler\PGeschw#
      Spieler\Py=Spieler\Py+Cos(Spieler\PWinkel)*Spieler\PGeschw#
   EndIf

TimBo

BeitragMo, Okt 26, 2009 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

bei dir kann man aber nur auf einer Achse laufen, bei mir auf mehreren. Wink

Oder warum ist mein Code nicht so gut ?

Grüße
TimBo
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.
 

da_poller

BeitragMo, Okt 26, 2009 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hab deinen nicht gelesen, sry ist vom handy aus anstrengend.

hab den knackpunkt an meinem code nun auch verstanden. hab nichts an deinem code auszusetzen. im gegenteil(kommt in mein schnipselarchiv Wink)

Thorsten

BeitragMo, Okt 26, 2009 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
M0rgenstern hat Folgendes geschrieben:
Atan2 benutz ich schon richtig. ist Draw3D.

Ob das OpenGL, Draw3D oder Blitz2D ist, ist völlig Wurst. Du wendest Atan2 (nun zum zweiten mal verlinkt) falsch an, und wenn du noch gar nicht verstanden hast was das überhaupt bewirkt, empfehle ich dir, alles from Scratch neu zu machen.

mfG,

Thorsten

TimBo

BeitragMo, Okt 26, 2009 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

danke proller Smile

Thorsten hat natürlich recht
ATan2(y,x) und nicht (x,y) habe ich auch mal falsch gemacht. Wink

Grüße
TimBo
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.

Noobody

BeitragMo, Okt 26, 2009 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Da in der Draw3D die Y-Achse vertauscht ist und im Code auch Sinus bzw. Cosinus umgekehrt angewendet werden, wird es wohl am Ende wieder richtig rauskomment Razz
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

M0rgenstern

BeitragDi, Okt 27, 2009 2:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, was die WInkel angeht: Es funktioniert. Also weiß ich nicht, warum ihr darauf rumhacken müsst.

Ich bin jetzt zu müde um noch was auszuprobieren, aber TimBos Code scheint mir sehr logisch.

Was da_poller mit dem Kommentar wollte:
Zitat:
nachdem wohl niemand meinen vorschlag oben gelesen hat hier der vorgekaute fertige code für dich nicht denken woller:


verstehe ich zwar nicht so ganz, weil er einfach nur meinen eigenen Code gepostet hat. Ich wüsste mal gerne wen er da ansprechen will.....


Lg, M0rgenstern

TimBo

BeitragDi, Okt 27, 2009 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Sorry, dass ich der Ansicht war, dass das mit den Winkeln falsch war. Kenne es halt nur so
Atan(y,x)
cos=>x
sin=>y

aber da_Proller hat nicht deinen Code gepostet ...
Er hatte den Vorschlage es so zu machen

da_Proller
BlitzBasic: [AUSKLAPPEN]

If erstebedingung Then
;Mach was
ElseIf zweitebedingung
;mach was
ElseIf drittebedingung
;mach was
Else viertebedinung
;mach was
EndIf



Dein Code war:
BlitzBasic: [AUSKLAPPEN]

If erstebedingung Then
;Mach was
EndIf

If zweitebedingung
;mach was
EndIf

If drittebedingung
;mach was
EndIf

If viertebedinung
;mach was
EndIf



und das war mein Code
BlitzBasic: [AUSKLAPPEN]

anzahl_tasten=KeyDown(17)+KeyDown(30)+KeyDown(31)+KeyDown(32)

;In den If abfragen
Spieler\Px=Spieler\Px-Sin(Spieler\PWinkel)*(Spieler\PGeschw#/ anzahl_tasten)
Spieler\Py=Spieler\Py-Cos(Spieler\PWinkel)*(Spieler\PGeschw#/ anzahl_tasten)



Greez
TimBo

M0rgenstern

BeitragMi, Okt 28, 2009 8:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, sorry, jetzt seh ich wo der Unterschied liegt.
Aber ich glaube nicht, dass es einen Unterschied machen würde. Das würde höchstens dafür sorgen, dass nicht mehr zwei Tasten gleichzeitig verarbeitet werden, d.h. man könnte sich nicht mehr diagonal bewegen.


Lg, M0rgenstern


Edit: Habs jetzt ausprobiert.
VIelen Dank TimBo.
Es klappt super.

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group