Code : Tout sélectionner
#RobotMesh = 0
#RobotTexture = 0
#Robot = 0
#CameraSpeed = 0.2
IncludeFile "Screen3DRequester.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
;lieu ou sont les media
Add3DArchive("data/" , #PB_3DArchive_FileSystem)
Add3DArchive("data/Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Angle = angleentity + 180
AmbientColor(RGB(255,255,255))
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
;on crée le terain a partir du fichier terrain.Png
CreateTerrain("Terrain.png", MaterialID(0), 10, 0.6, 10, 10)
;on crée la camera
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
;on charge le robotet on le texture
LoadMesh (#RobotMesh ,"Robot.mesh")
CreateMaterial(1, LoadTexture(2,"r2skin.jpg"))
;on créé l'entiter perso
CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(1))
;on annime l'entiter mais j'aimerai quelle soit animer seulement quadn on apui sur un touche
;(1ere probleme)
AnimateEntity(#Robot, "Walk")
DisableMaterialLighting(0, 1)
MaterialAmbientColor(0, RGB(100, 100, 100))
MaterialSpecularColor(0, RGB(255, 255, 255))
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
LightSpecularColor(0, RGB(255, 0, 0))
;on fait le ciel
SkyDome("Clouds.jpg",10)
;on redimensione lentitée
ScaleEntity(#Robot,0.05,0.05,0.05)
;on defini quelque variable hat est la hauteur de la camera et
;dst sa distance par raport a l'objet
DEcaleCam = 180
hat=5
dst = 13
; __________________________________
; | |
; | boucle principale du programme |
; |__________________________________|
Repeat
Screen3DEvents()
;pour tourner la camera autour du perso avec la souris
Angle = angleentity + MouseX
;si on apui sur une des touche suisvante on bouge la camera masi j'aimerai
;que ce soit fait avec la souris (2eme probleme)
If ExamineKeyboard()
If KeyboardPushed (#PB_Key_Add)
dst=dst+1
EndIf
If KeyboardPushed (#PB_Key_Subtract)
dst=dst-1
EndIf
If KeyboardPushed (#PB_Key_PageUp)
hat=hat+1
EndIf
If KeyboardPushed (#PB_Key_PageDown)
hat=hat-1
EndIf
;gestion clavier bouton fleche de gauche et fleche de droite
If KeyboardPushed(#PB_Key_Left)
KeyX = 3
Angle2= Angle2+3
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = -3
Angle2= Angle2-3
Else
KeyX = 0
EndIf
;gestion clavier bouton fleche du haut et fleche du bas
If KeyboardPushed(#PB_Key_Up)
KeyY = #CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = -#CameraSpeed
Else
KeyY = 0
EndIf
;gestion de la souris
If ExamineMouse()
If MouseButton(2) =1
MouseX = -(MouseDeltaX()/10)*#CameraSpeed*10
MouseY = -(MouseDeltaY()/10)*#CameraSpeed*10
EndIf
EndIf
;Tourne le robot
RotateEntity(0,KeyX,0,0)
;Déplace le robot
MoveEntity (0, Cos( Angle2 * 0.0174533 ) * KeyY, 0,- Sin( Angle2 * 0.0174533 ) * KeyY)
;Hauteur du robot sur le terrain
Height.f = TerrainHeight (EntityX(0), EntityZ(0)) +0.2
;Replace le Robot à la bonne hauteur sur le terrain
EntityLocate(#Robot,EntityX(#Robot),Height,EntityZ(#Robot))
;Gestion de la caméra après le déplacement du robot
;Angle de la caméra > On place la caméra derrière le robot
DEcaleCam - MouseX
Angle = Angle2 + DEcaleCam
PosXCamera.f = EntityX(0) + Cos( Angle * 0.0174533 ) * dst
PosZCamera.f = EntityZ(0) - Sin( Angle * 0.0174533 ) * dst
PosYCamera.f = EntityY(0) + hat
;Contrôle la hauteur de la caméra ,pour qu'elle survole le terrain en suivant le robot
HauteurCamera.f = TerrainHeight (PosXCamera, PosZCamera)
If HauteurCamera + hat > PosYCamera
PosYCamera = HauteurCamera + hat
EndIf
CameraLocate(0, PosXCamera , PosYCamera , PosZCamera)
DecaleLookY + MouseY
CameraLookAt(0, EntityX(0), EntityY(0) , EntityZ(0))
;j'aimerai ici que apres un double clique droit la camera reviene a sa vue de depart
;3eme probleme
If Event = WindowEvent()
ElseIf Event = #WM_RBUTTONDOWN
ElseIf Event = #WM_RBUTTONUP
ElseIf Event = #WM_RBUTTONDBLCLK
Angle = angleentity + 180
hat=5
dst=13
EndIf
EndIf
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
voila les petit porbleme sont expliquer dessus dans cette version les touche page haut-bas et + - sont utiliser