Code archives/3D Graphics - Misc/First Person Shooter Camera Control
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
This source code allows you to move and look around, jump, walk and fly. All I ask is if you use it please add me in the credits of your game, thanks. | |||||
; ; CameraControl.bb - Copyright ©2002 EdzUp ; Coded by Ed Upton ; ; For this demonstration you will need a terrain called LandBlue.bmp ; and a stone.bmp texture, the terrain image could be any heightmap ; and the stone.bmp could be any texture you want. Graphics3D 640,480,16,2 ;Initialise graphics SetBuffer BackBuffer() ;Initialise double buffering Global CamPivot = CreatePivot( ) ;create camera pivot Global Camera = CreateCamera( ) ;create camera with CamPivot as parent AmbientLight 255,255,255 ;the the global light level to fullbright Global Terrain = LoadTerrain( "LandBlur.bmp" ) ;Load landblue.bmp terrain (this could be any terrain) ScaleEntity Terrain, 8, 32, 8 Global Stone = LoadTexture( "stone.bmp" ) ;terrain texture, this too can be any texture EntityTexture Terrain, Stone MoveEntity CamPivot,256,250,256 ;Move camera above terrain Global Gravity# = 0.16 ;Game gravity Global PlayerGravity# = 0.0 ;current player gravity EntityType CamPivot, 1 EntityRadius CamPivot, 1.5 EntityType Camera, 1 EntityRadius Camera, 1.5 EntityType Terrain, 2 Collisions 1, 2, 2, 3 Collisions 2, 1, 2, 3 Global FlyMode=0 ;if 1 then flymode is on Global WalkSpeed#=.5 ;this handled the walking motion Global Jumped=0 ;Jump check While Not KeyDown(1) ;main loop TurnEntity CamPivot, 0, 0 -MouseXSpeed(), 0 ;left/right rotation TurnEntity Camera, MouseYSpeed(), 0, 0 ;up/down rotation RotateEntity CamPivot, EntityPitch#( CamPivot ), EntityYaw#( CamPivot ), 0 ;z roll correction MoveMouse GraphicsWidth()/2, GraphicsHeight()/2 ;move mouse pointer to center of screen RotateEntity Camera, EntityPitch#( Camera ), EntityYaw#( CamPivot ), 0 ;Z roll correction If KeyDown( 54 ) =1 ;Walk key (Right Shift) WalkSpeed# = .05 Else WalkSpeed# = .5 EndIf If KeyDown( 157 ) =1 ;Fly mode (Right CTRL) FlyMode=1 Else FlyMode=0 EndIf If KeyDown( 57 ) =1 And Jumped =0 ;Jump check PlayerGravity# = 2.5 Jumped =1 EndIf ;Cursor keys for movement If FlyMode=0 If KeyDown( 200 ) =1 Then MoveEntity CamPivot, 0, 0, WalkSpeed# If KeyDown( 208 ) =1 Then MoveEntity CamPivot, 0, 0, 0-WalkSpeed# PositionEntity Camera, EntityX#( CamPivot ), EntityY#( CamPivot ), EntityZ#( CamPivot ) Else If KeyDown( 200 ) =1 Then MoveEntity Camera, 0, 0, WalkSpeed# If KeyDown( 208 ) =1 Then MoveEntity Camera, 0, 0, 0-WalkSpeed# PositionEntity CamPivot, EntityX#( Camera ), EntityY#( Camera ), EntityZ#( Camera ) EndIf If KeyDown( 203 ) =1 Then MoveEntity CamPivot, -1, 0, 0 If KeyDown( 205 ) =1 Then MoveEntity CamPivot, 1, 0, 0 ; ************* Gravity check ************* If FlyMode=0 If EntityCollided( CamPivot, 2) ;do nothing if player is in contact with terrain PlayerGravity# = 0.0 Jumped =0 Else PlayerGravity# = PlayerGravity# - Gravity# EndIf EndIf ; ******* END OF GRAVITY CHECK ************ TranslateEntity CamPivot, 0, PlayerGravity#, 0 ;move camera pivot according to current gravity force UpdateWorld RenderWorld Flip Wend EndGraphics End |
Comments
| ||
I have a problem with this code in windowed mode with a mouse connected on the laptop. The camera mouse movement is broken then. It keeps moving the camera when you do not move the mouse.The touchpad mouse works fine. In fullscreen mode the error is not there either. I have no idea what could be wrong other then that it must be a mouse problem. |
Code Archives Forum