gta maussteuerungsproblem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

worschtbrot

Betreff: gta maussteuerungsproblem

BeitragDi, Aug 25, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zunächst einmal, ja ich weiss das es bereits etliche threads zu diesem thema gibt, dennoch ist bei mir ein problem aufgetreten, welches ich bisher noch nirgends einden konnte.
und zwar habe ich das gta script wie folgt verändert:
Code: [AUSKLAPPEN]
Graphics 800,600,32,0
SetBuffer BackBuffer()
Dim Auto(359)
TFormFilter 0
For winkel# = 0 To 359 Step 1
      Auto(winkel#)=LoadImage("auto.bmp")
      MidHandle Auto(winkel#)
      RotateImage auto(winkel#),winkel
      MaskImage Auto(winkel#),0,0,0
Next
Global x#=200
Global y#=200
Global geschwindigkeit#=0.3
While Not KeyHit(1)
Cls
mx=MouseY()
my=MouseY()
winkel#=((ATan2((y#-my()),(x#-mx())) + 360) Mod 360)+90
If winkel# > 359 Then winkel# = 0
If winkel# < 0 Then winkel# = 359
If KeyDown(200) Then
x = x - Sin(winkel#)*geschwindigkeit
y = y + Cos(winkel#)*geschwindigkeit
EndIf
DrawImage auto(winkel#),x#,y#
Flip
Wend
End


so und nun ist mein problem, dass immer dann wenn mx kleiner als x# und my größer als y# sich meine figur sich nach unten richtet (winkel 90°) und nicht mehr bewegt bis my wieder kleiner bzw mx wieder größer wird. woran liegt das?

mfg worschtbrot

Xeres

Moderator

BeitragDi, Aug 25, 2009 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also...
Code: [AUSKLAPPEN]
winkel#=((ATan2((y#-my()),(x#-mx())) + 360) Mod 360)+90

Warum addierst du da am Schluss 90? Das würde ich lassen.
Warum sind da Funktionsklammern hinter mx und my?

Du vertauschst Sinus und Cosinus hier...
richtig wäre
Code: [AUSKLAPPEN]
x = x + Cos(winkel#)*geschwindigkeit
y = y - Sin(winkel#)*geschwindigkeit
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

robotx

BeitragDi, Aug 25, 2009 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
mx=MouseY()
my=MouseY()


Tippfehler?
www.botbomb.robotzgames.de
www.robotzgames.de

worschtbrot

BeitragDi, Aug 25, 2009 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
so habe den schreibfehler verbessert(ist mir nicht aufgefallen, da kurz vor pasten hinzugefügt), ebenso sie funktionsklammern, da ich zuvor für mousex und y keine variablen hatte.
als zweites, habe ich sin un cos vertauscht da das bild sonst entweder spiegelverkeht läuft oder andere unerwünschte anstalten macht(vermutlich da sich mit bewegen des objektes,ja auch seine position im bezug auf die maus verändert), und so bewegt sich mein "auto" nun bis zu position der maus.
allerdings ist mein problem immer noch nicht gelöst... Sad

mfg worschtbrot

Xeres

Moderator

BeitragDi, Aug 25, 2009 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Code nix los.
Mein Tipp wäre aber folgendes:
So bekommt man den Winkel, auf dem man sich bewegen muss um zur Maus zu kommen:
Code: [AUSKLAPPEN]
ATan2( ( my-y# ),( mx-x# ) )

In deinem Code steht's anders herum.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

worschtbrot

BeitragDi, Aug 25, 2009 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
super!wenn ich es so mache wie du meintest xerxes, dann habe ich das selbe problem nur genau anders herum, dann streikt er nämlcih wenn mx größer ist als x# und my kleiner ist als y#. Confused
so und hier ist noch mal der code:
Code: [AUSKLAPPEN]
Graphics 800,600,32,0
SetBuffer BackBuffer()
Dim Auto(359)
TFormFilter 0
For winkel# = 0 To 359 Step 1
      Auto(winkel#)=LoadImage("auto.bmp")
      MidHandle Auto(winkel#)
      RotateImage auto(winkel#),winkel
      MaskImage Auto(winkel#),0,0,0
Next
Global x#=200
Global y#=200
Global geschwindigkeit#=0.3
While Not KeyHit(1)
Cls
mx=MouseX()
my=MouseY()
winkel#=((ATan2((y#-my),(x#-mx)) + 360) Mod 360)+90
If winkel# > 359 Then winkel# = 0
If winkel# < 0 Then winkel# = 359
If KeyDown(200) Then
x = x - Sin(winkel#)*geschwindigkeit
y = y + Cos(winkel#)*geschwindigkeit
EndIf
DrawImage auto(winkel#),x#,y#
Flip
Wend
End

freue mich auf weitere lösungsvorschläge^^

mfg worschtbrot

Xeres

Moderator

BeitragDi, Aug 25, 2009 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich willst du ja den Winkel mit Modulo auf 360° begrenzen.
Aber danach rechnest du weiterhin 90° drauf und verwendest dann die Zeilen
Code: [AUSKLAPPEN]
If winkel# > 359 Then winkel# = 0
If winkel# < 0 Then winkel# = 359

...
Klingelt's?
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

worschtbrot

BeitragMi, Aug 26, 2009 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
oh man bin ich blöd Embarassed
gut dann fallen mir sogar auf anhieb mehrere lösungen ein^^
gut danke xerxes

mfg worschtbrot

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group