Page 1 sur 1

Impossible de faire avancer ou reculer un cube

Publié : dim. 02/nov./2014 19:33
par falsam
Cet extrait de code permet de déplacer un cube avec les flèches haut et bas.

Je cherche à exécuter la fonction MoveEntity() pour déplacer ce cube uniquement si la vitesse est différente de 0.

:!: Hors le cube ne bouge pas.

par contre si je commente ce test (ligne 95), alors je peux déplacer ce cube.

Code : Tout sélectionner

EnableExplicit  

Enumeration
  #Mainform
EndEnumeration

Global WWIdth, WHeight,  Window, Event
Global Camera, Texture, Material, Mesh, Entity
Global Ground, Player, PlayerSpeed.f

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

OpenWindow(#Mainform,0,0, 0, 0, "", #PB_Window_SystemMenu | #PB_Window_Maximize)
WWidth = WindowWidth(#Mainform, #PB_Window_InnerCoordinate)
WHeight = WindowHeight(#Mainform, #PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(#Mainform),0,0,WWIdth,WHeight,0, 0, 0)

KeyboardMode(#PB_Keyboard_International)
 
;
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)

; 
; Texture et materiel pour le sol et le cube
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()

Material = CreateMaterial(#PB_Any,TextureID(texture))

;
; Création du sol 
Mesh = CreatePlane(#PB_Any, 20, 20, 3, 6, 6, 6)
Ground = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material), 0, 0, 0)
EntityPhysicBody(Ground, #PB_Entity_StaticBody, 2, 0, 1)

; 
; Creation du cube avatar
Mesh = CreateCube(#PB_Any, 1) 
Player = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material), 0, 2, 0)
EntityPhysicBody(Player, #PB_Entity_BoxBody, 10,2,2)

;
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -40, 4, 0)
WorldShadows(#PB_Shadow_Additive)

;
; et enfin une camera 
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))

Repeat
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
  Until Event = 0
  
  If ExamineKeyboard()
    If KeyboardPushed (#PB_Key_Escape)
      Break
    EndIf
  EndIf
  
  ;Rotation & 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

  ;En avant ou en arriére
  If KeyboardPushed (#PB_Key_Up)
    PlayerSpeed = 1.5
  ElseIf KeyboardPushed (#PB_Key_Down)
    PlayerSpeed = - 1.5
  Else
    PlayerSpeed = 0
  EndIf
  
  ;Mouvement du joueur  
  If PlayerSpeed <> 0
    MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
  EndIf 
    
  ;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(80)
  FlipBuffers()  
 
ForEver
Merci de votre aide :)

Re: Impossible de faire avancer ou reculer un cube

Publié : dim. 02/nov./2014 20:04
par falsam
Je me suis souvenu d'un post ou j'ai évoqué ce problème à propos de jointures qui ne se libéraient pas.

:arrow: http://www.purebasic.fr/french/viewtopi ... 84#p155084

:idea: kelebrindae a soupçonné que mes entités sont passés en sommeil et effectivement c'est le cas dans ce code que j'ai posté :
Mon cube pionce !!!

J'ai modifié le code en remplaçant

Code : Tout sélectionner

  ;Mouvement du joueur  
  If PlayerSpeed <> 0.0
    MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
  EndIf 
par

Code : Tout sélectionner

  ;Mouvement du joueur  
  If PlayerSpeed <> 0.0
    DisableEntityBody(Player, #False)
    MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
  EndIf 
et mon cube accepte enfin d'avancer ou de reculer.

Re: Impossible de faire avancer ou reculer un cube

Publié : dim. 02/nov./2014 20:11
par Fred
C'est un bug, ca devrait etre fait automatiquement dans la commande MoveEntity()