Je voulais aborder les collisions dans ce code qui permet de piloter un cube et de pousser les autres cubes dans le vide. Mais quand le cube que je pilote tombe lui même dans le vide, il chute au ralenti.
Code : Tout sélectionner
;Naissance d'un cube : l'accident (Gestion des collisions)
; Coordonnées x,y,z du Cube Avatar
Define.f X, Y, Z
InitEngine3D()
InitKeyboard()
InitSprite()
Parse3DScripts()
window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)
;
; Une texture qui servira pour le cube ainsi que les obstacles et le sol
Texture = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(255, 216, 0))
StopDrawing()
;
; Le materiel qui servira pour le cube ainsi que les obstacles et le sol
Material = CreateMaterial(#PB_Any,TextureID(texture))
;
; Création du sol
Ground_Mesh = CreatePlane(#PB_Any, 20, 20, 3, 6, 6, 6)
Ground = CreateEntity(#PB_Any, MeshID(Ground_Mesh), MaterialID(Material), 0, -2, 0)
EntityPhysicBody(Ground, #PB_Entity_StaticBody, 2, 0, 1)
;
; Creation du cube avatar
Cube_Mesh = CreateCube(#PB_Any, 1)
Cube_Entity = CreateEntity(#PB_Any, MeshID(Cube_Mesh), MaterialID(Material))
MoveEntity(Cube_Entity, 0, -1.5, 0)
EntityPhysicBody(Cube_Entity, #PB_Entity_BoxBody, 1,2,0)
;
; Création des obstacles
Obstacle_Mesh = CreateCube(#PB_Any, 1.5)
For N=1 To 5
Obstacle_Entity = CreateEntity(#PB_Any, MeshID(Obstacle_Mesh), MaterialID(Material), Random(5), Random(10), Random(5))
EntityPhysicBody(Obstacle_Entity, #PB_Entity_BoxBody, 1,0,1)
Next
EntityPhysicBody(Obstacle_Entity, #PB_Entity_BoxBody, 1,0,0)
;
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)
;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(131, 204, 249))
While #True
Event = WindowEvent()
If ExamineKeyboard()
; Touche Escape pour fermer l'application
If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
Break
EndIf
If KeyboardPushed(#PB_Key_Left)
X=-1
ElseIf KeyboardPushed(#PB_Key_Right)
X=1
Else
X=0
EndIf
If KeyboardPushed(#PB_Key_Up)
Z=-1
ElseIf KeyboardPushed(#PB_Key_Down)
Z=1
Else
Z=0
EndIf
EndIf
MoveEntity(Cube_Entity, X,Y,Z, #PB_Local)
MoveCamera(Camera, 2, 1 , 15, #PB_Absolute)
CameraLookAt(camera,EntityX(Cube_Entity),EntityY(Cube_Entity),EntityZ(Cube_Entity))
; Affiche le rendu de la scène
ClearScreen(RGB(0, 0, 0))
RenderWorld()
FlipBuffers()
Wend