EntityYaw() und moveentity sehe den fehler nicht

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Dottakopf

Betreff: EntityYaw() und moveentity sehe den fehler nicht

BeitragDo, Nov 18, 2010 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blitzer!

ganz einfaches problem:

2 Objekte
1 Objekt(Positions Cube) sorgt für die bewegung und positionierung auf dem boden
2 Objekt(Spieler Mesh) was sich mittels maus frei drehen lässt und nur zum "umsehen" dient

Spieler ist als child an Position Cube geheftet.


Problem:
mittels EntityYaw ermittle ich die aktulle Yaw ausrichtung meines Spieler Meshes und passe meinen Positions Cube diesen Winkel an. Somit wird die Drehung des Spielers erreicht, und mit Moveentity bewege ich den Position Cube in den vorgegebenen Winkel.

Und hier ist das Problem... laut debug anzeigen hat mein Cube genau den gleichen winkel wie das Spieler mesh, und sollte sich eigentlich in die Richtung bewegen in die geschaut wird. Nur irgendwie dreht der Cube irgendwie langsamer... und ich renn nur ansatzweise in die gewünschte richtung.

Nur wie kann das Sein ? cube hat doch die selbe winkel ausrichtung wie das mesh. Gibts da evt. Probleme wenn ich child und parent unabhängig von einander rumdrehe ?

Hier code : (leider bereits auf netzwerk getrimmt)

PlayerModel(UDP_PLAYERID) ist das Mesh / Child
PlayerPosBox(UDP_PLAYERID) ist der Cube / Parent

Code: [AUSKLAPPEN]

;MOVEMENT
             ;WASD Tasten
             If KeyDown(17) Then MoveEntity PlayerPosBox( UDP_PlayerID ) ,0,0,+1:move=1
             If KeyDown(31) Then MoveEntity PlayerPosBox( UDP_PlayerID ) ,0,0,-1:move=1
             If KeyDown(30) Then MoveEntity PlayerPosBox( UDP_PlayerID ) ,-1,0,0:move=1
             If KeyDown(32) Then MoveEntity PlayerPosBox( UDP_PlayerID ) ,+1,0,0:move=1
      

             yaw= EntityYaw(PlayerPosBox(UDP_PlayerID));check für bewegungsänderung

                     ;Vectoren ermitteln
                     fTurnVelocityX = fTurnVelocityX*fTurnVelocityFactor
                     fTurnVelocityY = fTurnVelocityY*fTurnVelocityFactor
                     
                     fTurnVelocityX = fTurnVelocityX - fTurnSpeed*MausXSpeed
                     fTurnVelocityY = fTurnVelocityY + fTurnSpeed*MausYSpeed


                     
                     RotateEntity PlayerModel(UDP_PlayerID), EntityPitch(PlayerModel(UDP_PlayerID)), EntityYaw(PlayerModel(UDP_PlayerID)) + fTurnVelocityX, EntityRoll(PlayerModel(UDP_PlayerID))
                     
                              
                              

                              ;winkel prüfen evt anpassen
                              If EntityPitch(PlayerModel(UDP_PlayerID)) + fTurnVelocityY < 80 Then
                                 
                                 If EntityPitch(PlayerModel(UDP_PlayerID)) + fTurnVelocityY > -80 Then
                                    
                                    RotateEntity PlayerModel(UDP_PlayerID), EntityPitch(PlayerModel(UDP_PlayerID)) + fTurnVelocityY, EntityYaw(PlayerModel(UDP_PlayerID)), EntityRoll(PlayerModel(UDP_PlayerID))
                                    
                                 Else
                                    
                                    RotateEntity PlayerModel(UDP_PlayerID), -80, EntityYaw(PlayerModel(UDP_PlayerID)), EntityRoll(PlayerModel(UDP_PlayerID))
                                    fTurnVelocityY = 0
                                    
                                 EndIf
                                 
                              Else
                                 
                                 RotateEntity PlayerModel(UDP_PlayerID), 80, EntityYaw(PlayerModel(UDP_PlayerID)), EntityRoll(PlayerModel(UDP_PlayerID))
                                 fTurnVelocityY = 0
                                 
                              EndIf

                     debug_wert=EntityYaw(PlayerModel(UDP_PlayerID))
                     debug_wert2=EntityYaw(PlayerPosBox(UDP_PlayerID))
                     debug_wert3=(EntityYaw(PlayerModel(UDP_PlayerID))+ fTurnVelocityX)

                     RotateEntity PlayerPosBox(UDP_PlayerID), EntityPitch(PlayerPosBox(UDP_PlayerID)), EntityYaw(PlayerModel(UDP_PlayerID)), EntityRoll(PlayerPosBox(UDP_PlayerID))
                     MoveMouse GraphicsWidth()/2, GraphicsHeight()/2




entscheidend ist die stelle ganz unten. wo ich den cube rotiere nur mit den winkelinformationen des meshes

2x die winkel des cubes und 1x winkel(yaw) des Spieler meshes

Code: [AUSKLAPPEN]


RotateEntity PlayerPosBox(UDP_PlayerID), EntityPitch(PlayerPosBox(UDP_PlayerID)), EntityYaw(PlayerModel(UDP_PlayerID)), EntityRoll(PlayerPosBox(UDP_PlayerID))



Sorry ich steh auf dem Schlauch ...


debug_wert1 bis 3 sind alle gleich
Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am Do, Nov 18, 2010 20:26, insgesamt 3-mal bearbeitet

Xeres

Moderator

BeitragDo, Nov 18, 2010 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
A) Du drehst die Box auf den Winkel der Box... also keine Änderung? PlayerModel <> PlayerPosBox
B) Es wäre vielleicht schneller aber auf alle Fälle übersichtlicher diese ganzen Winkel-Funktionsaufrufe in Variablen zu packen.
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)

Dottakopf

BeitragDo, Nov 18, 2010 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
nein ich drehe die box auf
pitch = box
yaw = mesh
roll = box


möchte ja nur den yaw winkel an das mesh anpassen, während pitch und roll unverändert bleiben. Sonst wäre es ja einfach XD
Rechtschreibfehler gelten der allgemeinen Belustigung!

Dottakopf

BeitragDo, Nov 18, 2010 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hm...also ich habs jetzt zum laufen gebracht... und so wie es jetzt gelöst wurde gefällt es mir eigentlich garnicht.


das Rotatenetity was aus winkel cube und winkel mesh einen winkel für den cube festlegt wurde nun durch eine zeile ersetzt die anhand der mausgeschwindigkeit den winkel direkt auf den cube setzt.

also wurde aus der zeile

Code: [AUSKLAPPEN]
 RotateEntity PlayerModel(UDP_PlayerID), EntityPitch(PlayerModel(UDP_PlayerID)), EntityYaw(PlayerModel(UDP_PlayerID)) + fTurnVelocityX, EntityRoll(PlayerModel(UDP_PlayerID))


ein billiges

Code: [AUSKLAPPEN]
TurnEntity PlayerPosBox(UDP_PlayerID),0,(0-MausXSpeed/3),0


keine ahnung warum es nicht funktioniert hat... aber dann muss ich halt jetzt wieder etwas pfuschen Sad

Danke für eure mühe!!
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group