Cooooooooooooooooooooooool!
Danke für den Tip! das bringt mich bei meinem eigenem Spiel weiter!



Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Terrain
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
#CameraSpeed = 5
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
LoadMesh (0, "Robot.mesh");-Mesh laden
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateMaterial(2, LoadTexture(2, "r2skin.jpg")) ;-Material für Entity erstellen
CreateTerrain("Terrain.png", MaterialID(0), 1, 1, 1, 4)
CreateEntity(1, MeshID(0), MaterialID(2), 100,100,100) ;-Entity erstellen
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
SkyDome("Clouds.jpg",5)
CreateLight(0,RGB(200,100,150),0,200,0)
AmbientColor(RGB(177,180,177))
WorldShadows(#PB_Shadow_Modulative)
ScaleEntity(1,0.1,0.1,0.1)
;-Entity X und Z position
Global botx.f, botz.f
botx = 300
botz = 300
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
;-Entity bewegen
If KeyboardPushed(#PB_Key_A)
rot + 1
RotateEntity(1,rot,0,0)
RotateCamera(0, 1 , 0, RollZ)
ElseIf KeyboardPushed(#PB_Key_D)
rot - 1
RotateEntity(1,rot,0,0)
RotateCamera(0, -1 , 0, RollZ)
EndIf
If KeyboardPushed(#PB_Key_W)
botx = botx + Cos(2*#PI*(rot/360))*0.1
botz = botz - Sin(2*#PI*(rot/360))*0.1
anim = 1
ElseIf KeyboardPushed(#PB_Key_S)
Else
anim = 0
EndIf
EndIf
If anim = 1
If funk = 0
funk = 1
AnimateEntity(1, "Walk")
EndIf
Else
If funka = 0
funka = 1
AnimateEntity(1, "Idle")
EndIf
EndIf
If anim = 0 And funk = 1
funk = 0
EndIf
If anim = 1 And funka = 1
funka = 0
EndIf
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
;Height.f = TerrainHeight(CameraX(0), CameraZ(0))
RotateCamera(0, MouseX , MouseY, RollZ)
;MoveCamera (0, KeyX, -CameraY(0)+Height+8, KeyY)
CameraLocate (0, botx - Cos(2*#PI*(rot/360))*15, TerrainHeight(botx,botz)+10, botz + Sin(2*#PI*(rot/360))*15)
EntityLocate(1,botx,TerrainHeight(botx,botz),botz);-Entityposition festlegen
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
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Terrain
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
#CameraSpeed = 5
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
; die folgenden beiden Proceduren rechnen einen Winkel vom Bogenmaß ins Gradmaß um
Procedure.f GSin(winkel.f)
ProcedureReturn Sin(winkel*#PI/180)
EndProcedure
Procedure.f GCos(winkel.f)
ProcedureReturn Cos(winkel*#PI/180)
EndProcedure
If InitEngine3D()
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
LoadMesh (0, "Robot.mesh");-Mesh laden
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateMaterial(2, LoadTexture(2, "r2skin.jpg")) ;-Material für Entity erstellen
CreateTerrain("Terrain.png", MaterialID(0), 1, 1, 1, 4)
CreateEntity(1, MeshID(0), MaterialID(2), 100,100,100) ;-Entity erstellen
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
SkyDome("Clouds.jpg",5)
CreateLight(0,RGB(200,100,150),0,200,0)
AmbientColor(RGB(177,180,177))
WorldShadows(#PB_Shadow_Modulative)
ScaleEntity(1,0.1,0.1,0.1)
;-Entity X und Z position
Global botx.f, botz.f
botx = 300
botz = 300
; Distanz der Camera zum Entity kann mit Mausrad verändert werden
; Mindestwert
MinCameraDistance = 5
; Maximalwert
MaxCameraDistance = 50
; Standardeinstellung
CameraDistance = 20
; Hier noch ein Paar optionen für die Camera Rotation
; AngleX ist waagerecht (bei 360 kann der Spieler sich komplett um das Mesh drehen)
MaxCameraAngleX = 360
MinCameraAngleX = 0
; AngleY ist senkrecht und als Sollwert definiert, die wahre Höhe wird an das Terrain angepasst
MaxCameraAngleY = 80
MinCameraAngleY = -20
; Mindesthöhe der Camera
MinCameraHeight = 5
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
;-Entity bewegen
If KeyboardPushed(#PB_Key_A)
rot + 1
RotateEntity(1,rot,0,0)
RotateCamera(0, 1 , 0, RollZ)
ElseIf KeyboardPushed(#PB_Key_D)
rot - 1
RotateEntity(1,rot,0,0)
RotateCamera(0, -1 , 0, RollZ)
EndIf
If KeyboardPushed(#PB_Key_W)
botx = botx + Cos(2*#PI*(rot/360))*0.1
botz = botz - Sin(2*#PI*(rot/360))*0.1
anim = 1
ElseIf KeyboardPushed(#PB_Key_S)
Else
anim = 0
EndIf
boty = TerrainHeight(botx,botz)+7
EndIf
If anim = 1
If funk = 0
funk = 1
AnimateEntity(1, "Walk")
EndIf
Else
If funka = 0
funka = 1
AnimateEntity(1, "Idle")
EndIf
EndIf
If anim = 0 And funk = 1
funk = 0
EndIf
If anim = 1 And funka = 1
funka = 0
EndIf
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
; diese Werte benutze ich für die Bewegung der Camera
MouseDeltaX = MouseDeltaX()
MouseDeltaY = MouseDeltaY()
If MouseWheel()
CameraDistance-MouseWheel()*#CameraSpeed/4
If CameraDistance < MinCameraDistance
CameraDistance = MinCameraDistance
ElseIf CameraDistance > MaxCameraDistance
CameraDistance = MaxCameraDistance
EndIf
EndIf
If MouseButton(2)
CameraAngleX+MouseDeltaX
CameraAngleY+MouseDeltaY
EndIf
EndIf
;Height.f = TerrainHeight(CameraX(0), CameraZ(0))
;RotateCamera(0, MouseX , MouseY, RollZ)
;MoveCamera (0, KeyX, -CameraY(0)+Height+8, KeyY)
;CameraLocate (0, botx - Cos(2*#PI*(rot/360))*15, TerrainHeight(botx,botz)+10, botz + Sin(2*#PI*(rot/360))*15)
If CameraAngleX > MaxCameraAngleX : CameraAngleX-360 : ElseIf CameraAngleX < 0 : CameraAngleX+360 : EndIf
If CameraAngleY > MaxCameraAngleY
CameraAngleY = MaxCameraAngleY
ElseIf CameraAngleY < MinCameraAngleY
CameraAngleY = MinCameraAngleY
EndIf
CameraLocate(0, GSin(CameraAngleX)*CameraDistance+botx, GSin(CameraAngleY)*CameraDistance+boty, GCos(CameraAngleX)*CameraDistance+botz)
If CameraY(0) < TerrainHeight(CameraX(0), CameraZ(0))+MinCameraHeight
CameraLocate(0, CameraX(0), TerrainHeight(CameraX(0), CameraZ(0))+MinCameraHeight, CameraZ(0))
EndIf
CameraLookAt (0, botx, boty, botz)
EntityLocate(1,botx,boty-7,botz);-Entityposition festlegen
RenderWorld()
Screen3DStats()
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(#White)
DrawText(10, 10, "CameraX: "+StrF(CameraX(0), 3))
DrawText(10, 30, "CameraY: "+StrF(CameraY(0), 3))
DrawText(10, 50, "CameraAngleX: "+Str(CameraAngleX))
DrawText(10, 70, "CameraAngleY: "+Str(CameraAngleY))
DrawText(10, 90, "CameraDistance: "+Str(CameraDistance))
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End