Code archives/3D Graphics - Misc/rpg_style_movement
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Moves a entity by mouse on a plane like in Diablo. Mouse down 1 to move | |||||
Graphics3D 640,480 AutoMidHandle True SeedRnd(MilliSecs) ;; FPS MFPS = 5 Period = 1000/MFPS Time = MilliSecs()-Period Global fps,timenext,frames ;player info_________________________________________________________________________________________ ;____________________________________________________________________________________________________ Global player_mesh ;The players Pointer Location Global marker_X# Global marker_Y# Global marker_Z# player_mesh=CreateCube() ScaleEntity player_mesh,2,2,2 EntityShininess player_mesh,.015 PositionEntity player_mesh,10,1,10 EntityOrder player_mesh,0 camera=CreateCamera() CameraRange camera,35,150 light=CreateLight(2) PositionEntity light,0,130,500 LightRange light,6000 terra_size=16 ; initial size of terrain, and no. of grids segments, along each side x_scale=100 ; x scale of terrain y_scale=1 ; y scale of terrain z_scale=100 ; z scale of terrain terra=CreateTerrain(terra_size) ScaleEntity terra,x_scale,y_scale,z_scale EntityPickMode terra,2 TerrainDetail terra,100,1 ; Set terrain detail, vertex morphing grid_tex=CreateTexture( 32,32,8 ) ScaleTexture grid_tex,.5,.5 SetBuffer TextureBuffer( grid_tex ) Color 0,0,64:Rect 0,0,32,32 Color 0,0,255:Rect 0,0,32,32,False SetBuffer BackBuffer() EntityTexture terra,grid_tex Global marker=CreateSphere() ScaleEntity marker,1,1,1 EntityColor marker,255,0,0 While Not KeyDown(1) PointEntity light,player_mesh ;temperary move cam function move_cam(camera) ;keep track of mouse position relative to visable grid function track_mouse(marker,camera) ;move the player to a picked position update_player(player_mesh,marker,camera) UpdateWorld RenderWorld If KeyHit(57)=True m=m+1 If m=2 Then m=0 If m=1 Then Text 0,40,"PickedX: "+PickedX#() Text 0,60,"PickedY: "+PickedY#() Text 0,80,"PickedZ: "+PickedZ#() Text 180,40,"marker_X: "+marker_X Text 180,60,"marker_Y: "+marker_Y Text 180,80,"marker_Z: "+marker_Z Text 0,100,"targetangle#"+targetangle# Text 0,120,"currentangle#"+currentangle# EndIf Text 2,2,"FPS: "+GetFPS(False) Flip False ;VWait : Flip False Wend End ;camera movement Function move_cam(camera) If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 If KeyDown( 208 )=True Then TurnEntity camera,0,0,-1 If KeyDown( 200 )=True Then TurnEntity camera,0,0,1 End Function ;keep track of mouse position relative to visable grid function Function track_mouse(marker,camera) marker_X#=Int(PickedX#()) marker_Z#=Int(PickedZ#()) marker_Y#=Int(PickedY#()) CameraPick(camera,MouseX(),MouseY()) End Function Function update_player(player_mesh,marker,camera) If MouseDown(1) Then FlushKeys PositionEntity marker,marker_X#,marker_Y#,marker_Z# ;Playerwalking=1 ;Else Playerwalking=0 EndIf If EntityDistance(player_mesh,marker)>5 PointEntity player_mesh,marker MoveEntity player_mesh,0,0,2 PositionEntity camera,EntityX(player_mesh)-22.5,EntityY(player_mesh)+65,EntityZ(player_mesh)-22.5 PointEntity camera,player_mesh ;Playerwalking=1 ;Else Playerwalking=0 EndIf End Function Function GetFPS(JustChecking = False) If Not JustChecking Then frames = frames+1 If MilliSecs() > timenext Then timenext = MilliSecs()+1000 fps = frames frames = 0 EndIf Return fps End Function |
Comments
| ||
It's a little fast, but you just put a . before the numbers to slow it down, it works good. |
| ||
Phoenix easier is to put a semicolon before false after Flip. With 6785 Frames per second its a bit fast indeed. ;-) |
Code Archives Forum