GTA Maussteuerung funktioniert nicht richtig?
Übersicht

![]() |
M0rgensternBetreff: GTA Maussteuerung funktioniert nicht richtig? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo an alle^^
Also, ich hab mein Problem im Forum gefunden. Aber ich konnte es nur teilweise lösen. Undzwar habe ich in mein Spiel eine Maussteuerung eingefügt. Man kann den Spieler mit der Maus drehen. Also, wenn man die Maus bewegt. Aber die Figur ist jetzt um 90° zur Maus versetzt, steht also im rechten Winkel zu ihr. Aber ich wüsste nicht wo mein Fehler liegt. Hier der Code: Code: [AUSKLAPPEN] Spieler\PWinkel=ATan2(MouseY()-Spieler\Py,MouseX()-Spieler\Px)+180
If Spieler\PWinkel > 359 Then Spieler\PWinkel = 0 If Spieler\PWinkel < 0 Then Spieler\PWinkel = 359 Gedreht wird das Bild am Anfang des Programm mit rotateimage. Ich hoffe ihr könnt mir helfen^^ Wenn ihr mehr Code braucht dann sagt das einfach^^ Danke schonmal, Lg, M0rgenstern |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau' mal unter ATan2![]() EDIT (damit ich nicht als völliger Idiot dastehe...): Ich dachte, darin steht, dass bei dem Befehl 0° rechts ist. Hatte ich mich wohl geirrt, habe mir den Eintrag eben nochmal angesehen. Tut mir Leid. |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
- Zuletzt bearbeitet von n-Halbleiter am Sa, Jul 25, 2009 21:52, insgesamt einmal bearbeitet
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
@n-Halbleiter: Guck mal in seinen Codeausschnitt ![]() @M0rgenstern: Ist das Bild deiner Figur evtl falsch gezeichnet? Wenn du mit Atan2 ![]() Code: [AUSKLAPPEN] Spieler\PWinkel=(ATan2(Spieler\Py-MouseY(),Spieler\Px-MouseX()) +360) Mod 360
mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey danke Holzchopf. Problem ist gelöst.
Ich hab das Bild selbst nach rechts gedreht, dann passts. Aber der Code muss trotzdem so aussehen: Code: [AUSKLAPPEN] Spieler\PWinkel#=(ATan2(Spieler\Py#-MouseY(),Spieler\Px#-MouseX()) + 180)
If Spieler\PWinkel > 359 Then Spieler\PWinkel = 0 If Spieler\PWinkel < 0 Then Spieler\PWinkel = 359 Wenn ich es so schreibe wie du es gezeigt hast dann ist das ganze um 180° versetzt. Also die Maus steht hinter dem Spieler^^ So wie ichs jetzt hab stimmts^^ Dankeschön. Aber eine Frage hätte ich noch. Momentan muss ich wirklich 360 Einzelbilder haben damit das Programm nicht abstürzt. Aber wenn ich das Bild immer um 4 drehe oder mehr, dann geht es viel schneller. Kann ich das jetzt immrnoch machen, bzw. was müsste ich dafür bei Atan2 ändern damit es passt? Lg, M0rgenstern |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ups, ich hätte die Reihenfolge dort nicht ändern sollen. Egal, so sollte es richtig sein:
Die Zeilen Zitat: Spieler\PWinkel#=(ATan2(Spieler\Py#-MouseY(),Spieler\Px#-MouseX()) + 180)
If Spieler\PWinkel > 359 Then Spieler\PWinkel = 0 If Spieler\PWinkel < 0 Then Spieler\PWinkel = 359 Lassen sich durch Code: [AUSKLAPPEN] Spieler\PWinkel#=(ATan2(MouseY()-Spieler\Py#,MouseX()-Spieler\Px#) + 360) Mod 360
Ersetzen. Das +360 verhindert negative Werte und Mod ![]() Das mit den weniger als 360 Bilder ist in der Tat eine gute Idee! Wenn du zB nur 36 Bilder möchtest (dh alle 10° ein Bild, reicht in der Regel), errechnest du den Frame (oder den Index im Array, jenachdem, wie du die Bilder handhabst), mit folgender Formel: Code: [AUSKLAPPEN] (Int(Spieler\PWinkel# /10) Mod 36)
Alle 10° ein Bild: Winkel durch 10 teilen, runden (mit Int ![]() ![]() ![]() mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm... Also vom Prinzip hab ich das verstanden, aber wie genau das aussehen soll versteh ich ehrlich gesagt nicht. Ich weiß auch nicht genau wo dein Code hingehören sollte. Ich arbeite mit einem array mit 359 Plätzen (also eigentlich 360^^)
lg.. M0rgenstern. |
||
![]() |
Falling.down |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin : )
Ich löste das mit Draw3D! 1. ist es einfacher und 2. läuft es viel schneller ( & weicher!) ![]() hier mein Beispiel: Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
Local Timer=CreateTimer(100) Local Camera=CreateCamera() CameraClsColor Camera,250,250,250 Include "data\Draw3D.bb" DrawInit3D(Camera) Origin3D(800,600) Local image=LoadImage3D("data\player.png") Local speed=4,x,y Repeat Local winkel#=(ATan2(mouseX3D-x,mousey3D-y)),setwinkel Local yspeed#=speed*Cos(winkel) Local xspeed#=speed*Sin(winkel) If KeyDown(17) And (mousey3D<>y Or mouseX3D)<>x Then y=y+yspeed x=x+xspeed EndIf If KeyDown(31) Then y=y-yspeed x=x-xspeed EndIf If KeyDown(32) Then y=y-speed*Cos(winkel-90) x=x-speed*Sin(winkel-90) EndIf If KeyDown(30) Then y=y-speed*Cos(winkel+90) x=x-speed*Sin(winkel+90) EndIf drawimage3D(image,x,y,1,winkel+180,2) If KeyHit(1) Then Exit RenderWorld Clear3D() Flip 0 WaitTimer(Timer) Forever mfg falling.down |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Falling Down, danke ich werds mal versuchen... Hab aber noch nie mit draw 3d gearbeitet^^ | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group