GTA Maussteuerung funktioniert nicht richtig?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

M0rgenstern

Betreff: GTA Maussteuerung funktioniert nicht richtig?

BeitragFr, Jul 24, 2009 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 24, 2009 22:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau' mal unter ATan2 in der OH.

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

Holzchopf

Meisterpacker

BeitragFr, Jul 24, 2009 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
@n-Halbleiter: Guck mal in seinen Codeausschnitt Rolling Eyes

@M0rgenstern: Ist das Bild deiner Figur evtl falsch gezeichnet? Wenn du mit Atan2 arbeitest, ist nämlich 0° Richtung rechts. Und dein Code lässt sich auch vereinfachen:
Code: [AUSKLAPPEN]
Spieler\PWinkel=(ATan2(Spieler\Py-MouseY(),Spieler\Px-MouseX()) +360) Mod 360


mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

M0rgenstern

BeitragFr, Jul 24, 2009 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Holzchopf

Meisterpacker

BeitragFr, Jul 24, 2009 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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 360 sorgt dafür, dass alles schön im Bereich 0...360 bleibt.

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), Ergebniss noch mit Mod 36 (36 weil 360° /10° = 36 Wink ) auf 0... 35 bringen (zB würde bei 359° /10°, gerundet ja 36 rauskommen, aber du hättest nur 36 Bilder, also 0 bis 35, also müsste Index 36 wieder 0 werden. Darum die kleine Rechnerei).

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

M0rgenstern

BeitragSa, Jul 25, 2009 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jul 28, 2009 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin : )

Ich löste das mit Draw3D!

1. ist es einfacher und
2. läuft es viel schneller ( & weicher!)
Cool

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

BeitragMi, Jul 29, 2009 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Falling Down, danke ich werds mal versuchen... Hab aber noch nie mit draw 3d gearbeitet^^

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group