[Blitz3D] MoveEntity 'Bewegt falsch' ['Gelöst']

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Cykid

Betreff: [Blitz3D] MoveEntity 'Bewegt falsch' ['Gelöst']

BeitragDi, Jul 01, 2014 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
//Lösung am Ende

Hallo Community Smile
Ich habe grade einen sehr blöden Fehler und sehe das Problem einfach nicht.

Ich möchte meinen Cube "Player" mit den Pfeiltasten 'Hoch' und 'Runter' bewegen, sprich den Cube auf der Y-Achse verschieben.

Das passiert auch, allerdings beweg sich der Cube scheinbar auch auf der Z-Achse.
Vlt. sehe ich gerade den Wald vor lauter Bäumen nicht.. vlt. könnt ihr mir ja helfen.

Die Hauptschleife (main.bb)
BlitzBasic: [AUSKLAPPEN]
AppTitle "3d World"

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

;Settings
Global FPS = 0
font = LoadFont("Arial",15,1)
SetFont font

;Includes
Include "module/grafik.bb" ;Render functionen / FPS
Include "module/cam.bb" ;Kamera / Licht erstellen
Include "module/player.bb" ;Player funktionen (Erst Init in Functions aufrufen)
Include "module/map.bb" ;Lade alle Map funktionen ein


;Functions
map_Init()
player_Init()


;Hauptschleife

While Not KeyHit(1)
grafik_Clear()

;3D
;Logik
player_Control()

;endLogik

;end3D
grafik_3DRender()

;2D
player_Hud()

;end2D
grafik_2DRender()
Wend

End


Die player.bb

BlitzBasic: [AUSKLAPPEN]
Global player_X = 2
Global player_Y = 5
Global player_Z = 14
Global player = CreateCube()

Function player_Init()
PositionEntity(player,player_X,32, player_Z)
End Function

Function player_Control()
If KeyDown(208) Then
player_Y = player_Y - 1
MoveEntity(player,player_X,player_Y,player_Z)
EndIf

If KeyDown(200) Then
player_Y = player_Y + 1
MoveEntity(player,player_X,player_Y,player_Z)
EndIf
End Function

Function player_Hud()
Text 0,0, player_X
Text 0,15, player_Y
Text 0,30, player_Z
End Function


Das dürfte alles an relevanten Code sein.

Vielen dank Smile

Edit:
Ich habe die Lösung gefunden, und wie erwartet war es ein sehr peinlicher Fehler Embarassed
Aber für Neulinge mit ähnlichen Problemen:
MoveEntity bewegt ein Objekt relativ. Das Bedeutet es bewegt das Objekt nicht auf eine Position wie es PositionEntity macht, sondern bewegt das Objekt tatsächlich um die gewichtigkeit des bestimmenden Parameters. Da ich die Koords immer wieder übergeben habe, wurde das Objekt auch um diese Werte bewegt. Dadruch die Verschiebung.

Lösungscode:

BlitzBasic: [AUSKLAPPEN]
Global player_X = 2
Global player_Y = 5
Global player_Z = 14
Global player = CreateCube()

Function player_Init()
PositionEntity(player,player_X,player_Y, player_Z)
End Function

Function player_Control()
If KeyDown(208) Then
; player_Y = player_Y - 1
MoveEntity(player,0,1,0)
EndIf

If KeyDown(200) Then
; player_Y = player_Y + 1
MoveEntity(player,0,-1,0)
EndIf
End Function

Function player_Hud()
Text 0,0, player_X
Text 0,15, player_Y
Text 0,30, player_Z
End Function

DAK

BeitragDi, Jul 01, 2014 6:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht ganz. MoveEntity bewegt das Objekt von seiner aktuellen Position in Richtung seiner momentanen Rotation. Drehst du das Objekt also um 90° nach rechts und sagst ihm dann mit MoveEntity er soll sich nach vorne bewegen, dann wird er sich von sich aus nach vorne, also nach rechts in Weltsicht, bewegen.

TranslateEntity bewegt das Objekt von seiner aktuellen Position ohne seine momentane Rotation zu berücksichtigen. Der nach rechts gedrehte Würfen würde somit seine Orientierung ignorieren und sich in Weltsicht nach vorne bewegen.

PositionEntity bewegt das Objekt von dem Welt-Ursprung (0,0,0) an die gegebene Position und ignoriert dabei die Rotation. Das heißt, PositionEntity(1,2,3) setzt das Objekt genau an die Position (1,2,3).
Gewinner der 6. und der 68. BlitzCodeCompo

Cykid

BeitragDi, Jul 01, 2014 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen dank für die Ergänzung!

Der 3D Bereich ist am Anfang doch recht Verwirrend und erfordert mehr Denksport als zunächst angenommen.

Aber alles, eins nach dem anderen Smile

DAK

BeitragDi, Jul 01, 2014 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, 3D erfordert einiges an umdenken. Ist prinzipiell nicht schwerer als 2D, nur anders.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group