EntityPitch / RotateEntity Problem
Übersicht

![]() |
ToeBBetreff: EntityPitch / RotateEntity Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
In dem folgenden Code :
Code: [AUSKLAPPEN] Global GRWidth = 1024
Global GRHeight = 768 Include "Data\Draw3D.bb" Graphics3D GRWidth,GRHeight,16,2 SetBuffer BackBuffer() SeedRnd MilliSecs() HidePointer() Global Camera = CreateCamera() CameraViewport Camera,0,0,GraphicsWidth(),GraphicsHeight() CameraRange Camera,0.1,1000 Global Beine = LoadAnimMesh("Data\Mod\Beine.b3d") Global BeineSTEH = ExtractAnimSeq(Beine,0,1) Global BeineLAUF = ExtractAnimSeq(Beine,1,5) ScaleEntity Beine,0.04,0.04,0.04 HideEntity Beine Global Torso = LoadAnimMesh("Data\Mod\Torso.b3d") Global TorsoSTEH = ExtractAnimSeq(Torso,0,1) Global TorsoLAUF = ExtractAnimSeq(Torso,1,5) NameEntity(Torso,"Torso") PositionEntity Torso,0,0,0,1 ScaleEntity Torso,0.04,0.04,0.04,1 HideEntity Torso Global Map = LoadMap("TestMap") Global Player = CopyEntity(Beine) Global PlayerT= CopyEntity(Torso) Global PlayerX= FindChild(PlayerT,"PUNKT") EntityParent PlayerT,FindChild(Player,"PUNKT") Global CameraPiv = CreatePivot(PlayerX) PositionEntity CameraPiv,0,1.5,-2,1;0.25,-0.75,1 Global ShowPiv = CreatePivot(PlayerX) PositionEntity ShowPiv,0,1.5,0,1 Global ShootPiv = CreateCone(5,1,PlayerX) ; ScaleEntity ShootPiv,5,5,5 PositionEntity ShootPiv,0,0.75,0,1 RotateEntity ShootPiv,-90,0,0 Global TPiv = CreatePivot(ShootPiv) PositionEntity TPiv,0,0,1 Global CamPiv=CameraPiv,CamObj=ShowPiv,CamPick=PickPiv Global MXSpeed#,MYSpeed#,MX#,MY# DrawInit3D(Camera) Global Pointer = LoadImage3D("Data\Gfx\Pointer.png",2,2,0) Global Font = LoadFont3D("Data\Gfx\Font.png") Repeat ;Player MXSpeed = MouseXSpeed() MYSpeed = MouseYSpeed() If MXSpeed < - 18 MXSpeed = -18 If MXSpeed > + 18 MXSpeed = +18 MoveMouse GRWidth / 2,GRHeight / 2 TurnEntity Player,0,-MXSpeed/3.0,0,1 TurnEntity PlayerX,MYSpeed/3.0,0,0 pt# = EntityPitch(PlayerX,1) pt = pt + (MYSpeed / 3.0) If pt < 45 pt = 45 ;RotateEntity PlayerX,pt,0,0 Moving = 0 If KeyDown(17) MoveEntity Player,0,0,0.1 : Moving = 1 If Moving = 1 If AnimSeq(Player) <> BeineLAUF Animate(Player,1,0.1,BeineLAUF) Else If AnimSeq(Player) <> BeineSTEH Animate(Player,3,0.1,BeineSTEH) EndIf If KeyDown(2) WireFrame 1 Else WireFrame 0 ;Camera If 1 = 1 dx# = -(EntityX(Camera) - EntityX(CamPiv,1)) * 0.075 dy# = -(EntityY(Camera) - EntityY(CamPiv,1)) * 0.075 dz# = -(EntityZ(Camera) - EntityZ(CamPiv,1)) * 0.075 TranslateEntity Camera,dx,dy,dz PointEntity Camera,CamObj pick = EntityPick(ShootPiv,1000) If pick CameraProject(Camera,PickedX(),PickedY(),PickedZ()) MX = ProjectedX() - GRWidth/2 MY = -1*(ProjectedY() - GRHeight/2) Else CameraProject(Camera,EntityX(Tpiv,1),EntityY(Tpiv,1),EntityZ(Tpiv,1)) MX = ProjectedX() - GRWidth/2 MY = -1*(ProjectedY() - GRHeight/2) EndIf EndIf DrawImage3D(Pointer,MX,MY,0,0,0.4) UpdateWorld() RenderWorld() Clear3D() Text 0,0,pt+";"+(MYSpeed/3.0);Pick+";"+PickedX()+","+PickedY()+","+PickedZ() Flip Until KeyHit(1) End Function LoadMap(Name$) Map = LoadMesh("Data\Map\"+Name$+".b3d") EntityPickMode Map,2 If Map = 0 Map = LoadMesh("Data\Map\"+Name$+".x") If Map = 0 RuntimeError "Map ''"+Name$+"'' does not exist !" EndIf Return map End Function wollte ich die Lego figur nur bis zu einem bestimmten winkel drehen lassen. Die figur (PlayerX) ist im normalzustand auf winkel 90, dann komischer weise wird es nach vorne und nach hinten kleiner (egal welche richtung) Was ist das Problem ? Weil wenn ich RotateEntity PlayerX,pt,0,0 den kommentar wegmache und TurnEntity auskommentiere, dann geht zwar alles nach hinten gut, also wenn die figur sich nach hinten lehnt, aber will ich mich nach vorne lehnen, dann hört der bei 90 (normal) auf... Ich habs sehr doof erklärt, wers sich mal angucken will : Download mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Lösung wird so oder so klapprig... Speichere doch einfach die Oberkörperdrehung in einer extra Variable. Das erspart dir das Problem und du hast mehr Kontrolle ^^. Und übrigens hätten die drei relevanten Zeilen es auch getan.
Ansonsten, denk mal über Folgendes nach: Das ganze Pitch/Yaw-System ist ja im Prinzip dasselbe wie die Längen- und Breitengrade auf der Erde. Jetzt nimm die mal deinen Globus zur Hand. Wenn dein Spieler anfangs bei 90 Grad ist, dann entspricht das 90° Nördlicher Breite. Was ist da? Oha, der Nordpol. Du versuchst jetzt eins hinzuzuaddieren. Such mal auf deinem Globus den 91. Breitengrad! Du willst nördlicher als der Nordpol sein. Blitz löst das vermutlich so, dass es sagt: OK, also jenseits vom Nordpol - das bedeutet auf dem entgegengesetzten Längengrad und um einen Breitengrad runter. Also 89°NB auf der anderen Seite des Globus. Da du dann aber im nächsten Frame wieder eins hinzuaddierst, springste wieder auf den Nordpol und wieder rüber und wieder zurück etc. Darum kann dein toller Plan nicht funktionieren. |
||
MrKeks.net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group