CameraFollow(#Camera, ObjetID, Angle, Hauteur, Distance, PourcentageRotation, PourcentagePosition [, Mode])
est apparu avec la version la version 5.20 de Pure Basic. Cette fonctionnalité permet de suivre un objet (
Entité, Lumière, Emetteur de Particles, etc ...).
Nous verrons ici comment suivre une entité avec notre caméra.
■ La camera suit une entité sans possibilité de regarder ailleurs. (Mode = #True)
■ La camera suit une entité tout en ayant la possibilité de regarder ailleurs. (Mode = #False)
■ La camera suit une entité tout en ayant la possibilité de regarder ailleurs uniquement si l'entité n'est plus en mouvement. (Mode #False ou #True)
Ces codes sont sans fioriture afin de rester concentrer sur le sujet.
Escape permet de sortir du jeu. Utilisez
les touches fléchées du clavier pour avancer, freiner, tourner à gauche et à droite ainsi que la touche
Espace pour stopper l'entité.
■ La camera suit une entité sans possibilité de regarder ailleurs. (Mode = #True)
Code : Tout sélectionner
; Naissance d'un cube : Camera Follow
; La camera suit une entité sans possibilité de regarder ailleurs. (Mode = #True)
EnableExplicit
InitEngine3D()
InitKeyboard()
InitSprite()
Global Window, Event
Global Camera
Global Texture, Material, Mesh, Entity
Global Player, PlayerSpeed.d
Global X.f, Y.f
Window = OpenWindow(#PB_Any,0,0,1024,768,"Camera Follow")
OpenWindowedScreen(WindowID(window),0,0,1024,768)
;
; Activation Physics et Collisions (A mon avis ça ne sert à rien)
EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
;
; Ambience, Lumiére blanche et activation des ombres
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)
;
; Camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))
;
; Materiel (texture) qui servira pour le sol, le cube les obstacles
Texture = CreateTexture(#PB_Any,256,256)
StartDrawing(TextureOutput(Texture))
Box(0,0,256,256,RGB(0, 0, 0))
Box(1,1,252,252,RGB(255, 216, 0))
StopDrawing()
Material = CreateMaterial(#PB_Any, TextureID(Texture))
MaterialFilteringMode(Material, #PB_Material_Anisotropic, 6) ;Meilleurs rendu de la texture
;
; Creation du sol (Obstacle static)
Mesh = CreatePlane(#PB_Any, 100, 100, 1, 1, 12, 12)
Entity = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material))
CreateEntityBody(Entity, #PB_Entity_StaticBody, 0,0,1)
;
; Le joueur
Mesh = CreateCube (#PB_Any, 1)
Player = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, 0, 2, 0)
CreateEntityBody(Player, #PB_Entity_BoxBody, 1, 1, 0)
Repeat
Event = WindowEvent()
If ExamineKeyboard()
;Sortie du jeu
If KeyboardPushed (#PB_Key_Escape)
Break
EndIf
;En avant ou Freinage
If KeyboardPushed (#PB_Key_Up)
PlayerSpeed + 0.1
ElseIf KeyboardPushed (#PB_Key_Down)
PlayerSpeed - 0.1
EndIf
;A gauche ou à droite
If KeyboardPushed (#PB_Key_Left)
RotateEntity(Player, 0, 1.5, 0, #PB_Relative)
ElseIf KeyboardPushed (#PB_Key_Right)
RotateEntity(Player, 0, -1.5, 0, #PB_Relative)
EndIf
;Freinage d'urgence
If KeyboardPushed(#PB_Key_Space)
PlayerSpeed = 0
EndIf
EndIf
;Mouvement du joueur
MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
;CamearaFollow (PB 5.20) permet de suivre le joueur
CameraFollow(Camera, EntityID(Player), 180, EntityY(Player) + 3, 6, 0.05, 0.05, #True)
; Affiche le rendu de la scène
RenderWorld(40)
FlipBuffers()
ForEver
■ La camera suit une entité tout en ayant la possibilité de regarder ailleurs. (Mode = #False)
Commencer à avancer et utiliser la souris pour regarder ailleurs.
Code : Tout sélectionner
; Naissance d'un cube : Camera Follow
; La camera suit une entité tout en ayant la possibilité de regarder ailleurs. (Mode = #False)
EnableExplicit
InitEngine3D()
InitKeyboard()
InitMouse()
InitSprite()
Global Window, Event
Global Camera, CamX.f, CamY.f
Global Texture, Material, Mesh, Entity
Global Player, PlayerSpeed.f
Window = OpenWindow(#PB_Any,0,0,1024,768,"Camera Follow")
OpenWindowedScreen(WindowID(window),0,0,1024,768)
;
; Activation Physics et Collisions (A mon avis ça ne sert à rien)
EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
;
; Ambience, Lumiére blanche et activation des ombres
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)
;
; Camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))
;
; Materiel (texture) qui servira pour le sol, le cube les obstacles
Texture = CreateTexture(#PB_Any,256,256)
StartDrawing(TextureOutput(Texture))
Box(0,0,256,256,RGB(0, 0, 0))
Box(1,1,252,252,RGB(255, 216, 0))
StopDrawing()
Material = CreateMaterial(#PB_Any, TextureID(Texture))
MaterialFilteringMode(Material, #PB_Material_Anisotropic, 6) ;Meilleurs rendu de la texture
;
; Creation du sol (Obstacle static)
Mesh = CreatePlane(#PB_Any, 100, 100, 1, 1, 12, 12)
Entity = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material))
CreateEntityBody(Entity, #PB_Entity_StaticBody, 0,0,1)
;
; Le joueur
Mesh = CreateCube (#PB_Any, 1)
Player = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, 0, 0.5, 0)
CreateEntityBody(Player, #PB_Entity_BoxBody, 1, 1, 0)
;
;Debut du jeu : On fixe la caméra derriere le joueur
CameraFollow(Camera, EntityID(Player), 180, EntityY(Player) + 3, 6, 0.05, 0.05, #True)
;La caméra étant orienté vers le haut, on la force à regarder vers l'entité
;la caméra bascule de 100 degres en arriere
RotateCamera(Camera, -100, CamX, 0, #PB_Relative)
;Avec une valeur de -180 Degres la camera regarde le sol
Repeat
Event = WindowEvent()
If ExamineMouse()
CamX = -MouseDeltaX() * 0.05
CamY = -MouseDeltaY() * 0.05
EndIf
If ExamineKeyboard()
;Sortie du jeu
If KeyboardPushed (#PB_Key_Escape)
Break
EndIf
;En avant ou Freinage
If KeyboardPushed (#PB_Key_Up)
PlayerSpeed + 0.1
ElseIf KeyboardPushed (#PB_Key_Down)
PlayerSpeed - 0.1
EndIf
;A gauche ou à droite
If KeyboardPushed (#PB_Key_Left)
RotateEntity(Player, 0, 1.5, 0, #PB_Relative)
ElseIf KeyboardPushed (#PB_Key_Right)
RotateEntity(Player, 0, -1.5, 0, #PB_Relative)
EndIf
;Freinage d'urgence
If KeyboardPushed(#PB_Key_Space)
PlayerSpeed = 0
EndIf
EndIf
;Mouvement du joueur
MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
;CamearaFollow (PB 5.20) permet de suivre notre entité
CameraFollow(Camera, EntityID(Player), 180, EntityY(Player) + 3, 6, 0.05, 0.05, #False)
RotateCamera(Camera, CamY, CamX, 0, #PB_Relative)
; Affiche le rendu de la scène
RenderWorld(40)
FlipBuffers()
ForEver
■ La camera suit une entité tout en ayant la possibilité de regarder ailleurs uniquement si l'entité n'est plus en mouvement. (Mode #False ou #True)
Code : Tout sélectionner
; Naissance d'un cube : Camera Follow
; La camera suit une entité tout en ayant la possibilité de regarder ailleurs
; uniquement si l'entité n'est plus en mouvement. (Mode #False ou #True)
EnableExplicit
InitEngine3D()
InitKeyboard()
InitMouse()
InitSprite()
Global Window, Event
Global Camera, CamX.f, CamY.f
Global Texture, Material, Mesh, Entity
Global Player, PlayerSpeed.f
Global KeyPress.b
Window = OpenWindow(#PB_Any,0,0,1024,768,"Camera Follow")
OpenWindowedScreen(WindowID(window),0,0,1024,768)
;
; Activation Physics et Collisions (A mon avis ça ne sert à rien)
EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
;
; Ambience, Lumiére blanche et activation des ombres
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)
;
; Camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))
;
; Materiel (texture) qui servira pour le sol, le cube les obstacles
Texture = CreateTexture(#PB_Any,256,256)
StartDrawing(TextureOutput(Texture))
Box(0,0,256,256,RGB(0, 0, 0))
Box(1,1,252,252,RGB(255, 216, 0))
StopDrawing()
Material = CreateMaterial(#PB_Any, TextureID(Texture))
MaterialFilteringMode(Material, #PB_Material_Anisotropic, 6) ;Meilleurs rendu de la texture
;
; Creation du sol (Obstacle static)
Mesh = CreatePlane(#PB_Any, 100, 100, 1, 1, 12, 12)
Entity = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material))
CreateEntityBody(Entity, #PB_Entity_StaticBody, 0,0,1)
;
; Le joueur
Mesh = CreateCube (#PB_Any, 1)
Player = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, 0, 0.5, 0)
CreateEntityBody(Player, #PB_Entity_BoxBody, 1, 1, 0)
;
;Debut du jeu : On fixe la caméra derriere le joueur
CameraFollow(Camera, EntityID(Player), 180, EntityY(Player) + 3, 6, 0.05, 0.05, #True)
;La caméra étant orienté vers le haut, on la force à regarder vers l'entité
;la caméra bascule de 100 degres en arriere
RotateCamera(Camera, -100, CamX, 0, #PB_Relative)
;Avec une valeur de -180 Degres la camera regarde le sol
Repeat
Event = WindowEvent()
If ExamineMouse()
CamX = -MouseDeltaX() * 0.05
CamY = -MouseDeltaY() * 0.05
EndIf
If ExamineKeyboard()
;Sortie du jeu
If KeyboardPushed (#PB_Key_Escape)
Break
EndIf
;En avant ou Freinage
If KeyboardPushed (#PB_Key_Up)
PlayerSpeed + 0.1
ElseIf KeyboardPushed (#PB_Key_Down)
PlayerSpeed - 0.1
EndIf
;A gauche ou à droite
If KeyboardPushed (#PB_Key_Left)
RotateEntity(Player, 0, 1.5, 0, #PB_Relative)
ElseIf KeyboardPushed (#PB_Key_Right)
RotateEntity(Player, 0, -1.5, 0, #PB_Relative)
EndIf
;Freinage d'urgence
If KeyboardPushed(#PB_Key_Space)
PlayerSpeed = 0
EndIf
EndIf
;Mouvement du joueur
MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
;CameraFollow (PB 5.20) permet de suivre notre entité
If PlayerSpeed = 0
CameraFollow(Camera, EntityID(Player), 180, EntityY(Player) + 3, 6, 0.05, 0.05, #False)
RotateCamera(Camera, CamY, CamX, 0, #PB_Relative)
Else
CameraFollow(Camera, EntityID(Player), 180, EntityY(Player) + 3, 6, 0.05, 0.05, #True)
EndIf
; Affiche le rendu de la scène
RenderWorld(40)
FlipBuffers()
ForEver