Вообщем хочу посоветоавться как лучше всего перемещать игрока.
Вот такое игровое поле будет:

Type Camera
Field Obj
End Type
Type Land
Field Obj
End Type
Const UPS=30
Graphics3D 640,480,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
HidePointer ()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
font_Main=LoadFont("arial",16)
SetFont font_Main
fnCreateTerrain()
fncreateCam1.camera()
l=CreateLight()
RotateEntity l,90,0,0
period=1000/UPS
time=MilliSecs()-period
Repeat
Repeat
elapsed=MilliSecs()-time
Until elapsed
ticks=elapsed/period
tween#=Float(elapsed Mod period)/Float(period)
For k=1 To ticks
time=time+period
Cls
Delay 5
fnCamera_Look(camera)
fnCamera_Free_Fly(camera)
If KeyHit(1)
FreeFont font_main
ClearWorld()
Delay 300
End
End If
UpdateWorld
Next
RenderWorld tween
Flip
Forever
Function fnCreateCam1.camera()
Local cam1.camera
cam1 = New Camera
cam1\obj=CreateCamera()
PositionEntity cam1\obj,0,2,0
RotateEntity cam1\obj,20,-45,0
CameraRange cam1\obj,.1,35
CameraClsColor cam1\obj ,255,255,255
CameraFogMode cam1\obj,1
CameraFogRange cam1\obj,1,100
CameraFogColor cam1\obj,255,255,255
Return cam1
End Function
Function fnCamera_Look(cam,speedx#=2,speedy#=2,dang=-89,upang=89)
For cam1.camera=Each camera
mxs=MouseXSpeed()
mys=MouseYSpeed()
xrot#=EntityPitch(cam1\obj)
yrot#=EntityYaw(cam1\obj)
If(xrot#<upang)And(mys>0)Then xrot#=xrot#+speedx#*mys/10
If(xrot#>upang)And(mys>0)Then xrot#=upang
If(xrot#>dang)And(mys<0)Then xrot#=xrot#+speedx#*mys/10
If(xrot#<dang)And(mys<0)Then xrot#=dang
yrot=yrot-speedy#*mxs/10
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity cam1\obj,xrot,yrot,0
Next
End Function
Function fnCamera_Free_Fly(Obj,mf#=.5,mb#=.5,ml#=.5,mr#=.5)
For cam1.camera=Each camera
If MouseDown(1) Then MoveEntity cam1\obj, 0 ,0, mf#;W
If MouseDown(2) Then MoveEntity cam1\obj, 0 ,0,-mb#;S
If KeyDown(30) Then MoveEntity Obj,-ml#,0, 0 ;A
If KeyDown(32) Then MoveEntity Obj, mr#,0, 0 ;D
Next
End Function
Function fnDeleteCam()
For cam1.camera = Each camera
FreeEntity cam1\obj
Delete cam1
Next
End Function
Function fnCreateTerrain(size=32,zoom#=.35,minVal#=0,maxVal#=1)
grass_tex=CreateTexture( 128,128 )
SetBuffer TextureBuffer(grass_tex)
ClsColor 255,255,255
Cls
For a=0 To 128
For b=0 To 128
Color Rand(0,16),Rand(64,128),Rand(0,4)
Plot a,b
Next
Next
SetBuffer BackBuffer()
Local ter.land
ter=New land
ter\obj=CreateTerrain (size)
SeedRnd 100
For x=0 To size
For z=0 To size
height#=Rnd (minVal,maxVal)
ModifyTerrain ter\obj,x,z,height
Next
Next
EntityTexture ter\obj,grass_tex
ScaleEntity ter\obj,1,zoom,1
FreeTexture grass_tex
Return ter\obj
End Function
как видно из семпла, то нетрудно догадаться, что ландшаф не прямой. У меня есть хороший пример как перемещать игрока и не один, но у меня тут возникли вопросы
1. Так как ландшафт не прямой, хотелось бы что бы объект, который пеемещается по тему, "точно как в жизни", пападал в ямки и выходил из нее. Ест ьу меня пример. называется driver. - Но как лучше (проще) всего сделать такое перемещение? Ведь у еня не будет ни заносов...ни чего бы то не было более сложного.
2. Наверное придется в игре ИИ писать. Я бы хотел заранее, что бы игрок после перемещения. (например от переместился в точку с координатой по X=134.4) ставал в точку x=134.(то есть округлять координаты). Мне такой пример писали. ам все сделанно по массивам. А есть еще варианты?
3. Может что бы не заморачиваться сделать передвжение только вперед, назад, влево, вправо (без возможности крутиться на все 360 градусов)
Вообщем так или иначе я не знаю как лучше всего всеэто сделать и поэтому...
Поэтому спрашиваю!