You don't have a physics body for your entity ...
I modified the SimpleCollision.pb example from
http://www.purebasic.com/Ogre1.6.zip for you:
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - Camera
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
#CameraSpeed = 10
#Camera = 0
Enumeration
#Robot
EndEnumeration
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data\", #PB_3DArchive_FileSystem)
Add3DArchive("Cube\", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
;AmbientColor(RGB(128,128,128))
;WorldShadows(#PB_Shadow_Additive)
CreateMaterial(0, LoadTexture(0, "r2skin.jpg"))
CreateMaterial(1, LoadTexture(1, "Background.png"))
LoadMesh(0, "Cube.mesh")
LoadMesh(1, "Robot.mesh")
CreateCamera(#Camera, 0, 0, 100, 100) ; Front camera
CameraLocate(#Camera, 0, 200, 300)
CameraLookAt(#Camera, 0, 0, 0)
;CreateLight(0, RGB(255,255,255), 100.0, 100, 0)
; The cube mesh is 100x100x100
Scale = 100
; create the floor
;
Floor = CreateEntity(#PB_Any, MeshID(0), MaterialID(1), 0, -Scale, 0)
ScaleEntity(Floor, 11, 1, 11)
EntityPhysicBody(Floor, #PB_Entity_StaticBody)
For x = -5 To 5 Step 2
For z = -5 To 5 Step 2
Block = CreateEntity(#PB_Any, MeshID(0), MaterialID(0), x*Scale, 0, z*Scale)
EntityPhysicBody(Block, #PB_Entity_StaticBody)
SetEntityMass(Block, 10.0)
Next
Next
CreateEntity(#Robot, MeshID(1), MaterialID(0), 0, -30, 0)
EntityPhysicBody(#Robot, #PB_Entity_SphereBody, #PB_Entity_AbsoluteBodyMove)
SetEntityMass(#Robot, 1.1)
WorldGravity(98.1)
AnimateEntity(#Robot, "Walk")
OldRobotX.d = EntityX(#Robot)
OldRobotZ.d = EntityZ(#Robot)
Repeat
Screen3DEvents()
If ExamineKeyboard()
SpeedX = 0
SpeedZ = 0
If KeyboardPushed(#PB_Key_Left)
SpeedX = -10
ElseIf KeyboardPushed(#PB_Key_Right)
SpeedX = 10
Else
EndIf
If KeyboardPushed(#PB_Key_Up)
SpeedZ = -10
ElseIf KeyboardPushed(#PB_Key_Down)
SpeedZ = 10
EndIf
MoveEntity(#Robot, SpeedX*3, 0, SpeedZ*3)
EndIf
NewRobotX.d = EntityX(#Robot)
NewRobotZ.d = EntityZ(#Robot)
RobotSpeedX.d = NewRobotX - OldRobotX
RobotSpeedZ.d = NewRobotZ - OldRobotZ
OldRobotX = NewRobotX
OldRobotZ = NewRobotZ
RobotSpeedLength.d = RobotSpeedX * RobotSpeedX + RobotSpeedZ * RobotSpeedZ
If RobotSpeedLength > 0.05
RobotSpeedLength = 1.0 / Sqr(RobotSpeedLength)
RobotSpeedX * RobotSpeedLength
RobotSpeedZ * RobotSpeedLength
; EntityLookAt(#Robot, EntityX(#Robot) + RobotSpeedX, EntityY(#Robot), EntityZ(#Robot) + RobotSpeedZ)
CameraLocate(#Camera, EntityX(#Robot) - RobotSpeedX * 100.0, EntityY(#Robot) + 130.0, EntityZ(#Robot) - RobotSpeedZ * 100.0)
CameraLookAt(#Robot, EntityX(#Robot), EntityY(#Robot) + 70.0, EntityZ(#Robot))
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
For a first person view just replace the lines containing
Code: Select all
CameraLocate(#Camera, EntityX(#Robot) - RobotSpeedX * 100.0, EntityY(#Robot) + 130.0, EntityZ(#Robot) - RobotSpeedZ * 100.0)
CameraLookAt(#Robot, EntityX(#Robot), EntityY(#Robot) + 70.0, EntityZ(#Robot)))
with
Code: Select all
HideEntity(#Robot, 1)
CameraLocate(#Camera, EntityX(#Robot), EntityY(#Robot) + 50.0, EntityZ(#Robot))
CameraLookAt(#Robot, CameraX(#Camera) + RobotSpeedX, CameraY(#Camera), CameraZ(#Camera) + RobotSpeedZ