J'ai un souci avec le déplacement d'une entité (player) qui de temps en temps bascule.
Quel serait la bonne méthode pour éviter que mon entité bascule ?
Comment faire aussi pour que mon entité sache monter un escalier par exemple, sans pour cela utiliser une touche pour effectuer une impulsion verticale.
Le code initiale étant trop long. Je poste un code minimaliste dans lequel le player est représenté par un cylindre. Le player ayant tendance à s'endormir j'ai ajouté un
Code : Tout sélectionner
DisableEntityBody(Player, #False)
Code de test.
Code : Tout sélectionner
Enumeration
#Mainform
EndEnumeration
Global Speed.f
InitEngine3D() : InitKeyboard() : InitSprite() : InitMouse()
OpenWindow(#Mainform,0,0, 1024, 768, "", #PB_Window_TitleBar)
OpenWindowedScreen(WindowID(#Mainform),0,0,1024,768,0, 0, 0)
Add3DArchive(#PB_Compiler_Home + "\Examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
;Light & Shadow
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -5, 10, 5)
WorldShadows(#PB_Shadow_Additive)
;Camera
CreateCamera(0, 0, 0,100,100)
CameraBackColor(0, RGB(145, 182, 201))
MoveCamera(0, 0, 5, 10, #PB_Absolute)
CameraLookAt(0, 0,0,0)
;Ground
Ground = CreateEntity(-1, MeshID(CreatePlane(-1, 20, 20, 1, 1, 10, 10)), #PB_Material_None)
EntityPhysicBody(Ground, #PB_Entity_StaticBody)
;Escalier
For n = 1 To 5
Entity = CreateEntity(-1, MeshID(CreateCube(-1, 1)), #PB_Material_None, 3+n, n/10, -3)
ScaleEntity(Entity, 1, 0.2, 1)
EntityPhysicBody(Entity, #PB_Entity_StaticBody)
Next
;Player
Player = CreateEntity(-1, MeshID(CreateCylinder(-1, 0.2, 2)), #PB_Material_None, 0, 1.5, 0)
EntityPhysicBody(Player, #PB_Entity_CylinderBody, 1, 0.1, 0.1)
Repeat
Repeat : Until WindowEvent() = 0
If ExamineKeyboard()
If KeyboardPushed (#PB_Key_Escape)
Break
EndIf
If KeyboardPushed (#PB_Key_Up)
Speed = -1
ElseIf KeyboardPushed (#PB_Key_Down)
Speed = 1
Else
Speed = 0
EndIf
If KeyboardPushed (#PB_Key_Right)
Rotate = -1
ElseIf KeyboardPushed (#PB_Key_Left)
Rotate = 1
Else
Rotate = 0
EndIf
EndIf
If Speed <> 0 Or Rotate <> 0
DisableEntityBody(Player, #False) ;Workaround
RotateEntity(Player, 0, Rotate, 0, #PB_Relative)
MoveEntity(Player, 0, 0, Speed, #PB_Absolute|#PB_Local)
EndIf
CameraFollow(Camera, EntityID(Player), 0, 3, 3, 0.1, 0.1)
RenderWorld(30)
FlipBuffers()
ForEver