Сообщение от Damp
Мне кажется это от того, что гравитация постоянно действует.
Попробуй проверять коллизию с землей и при коллизии отключать гравитацию.
А вообще-то должно и с PointEntity работать если создать плеера как чайлда планеты...
Напиши полностью свой код, посмотрим.
|
если EntityCollided(Player,tplanet) то gravity=0 иначе gravity=-.6
игрок столкнулся с землей и остановился. Но без движения нет и коллизии - включается gravity.
Получается как бы сказать дрожжание, игрок будет неизбежно скользить.
Гравитацию лучше совсем не трогать, иначе может быть ситуация если игрок взберется на холм, то уже не спустится с него.
PointEntity - действует по каким-то другим принципам, тут проблема с полюсами
причем чем ближе игрок к полюсу, тем
не это не описать это видеть надо.

Graphics3D 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
If Windowed3D() HidePointer
Const TPLayer%=1,Tplanet%=2
Global Player=CreatePivot()
PositionEntity Player,0,410,0
EntityType Player,TPlayer
EntityRadius Player,6
Global cam=CreateCamera(Player)
CameraClsColor cam,100,120,160
Global light=CreateLight()
Global planet=CreateSphere(64)
ScaleMesh planet,400,400,400
EntityType planet,Tplanet
tex=CreateTexture(64,64,1+8)
LockBuffer TextureBuffer(tex)
For i=0 To 4000
WritePixelFast Rand(0,63),Rand(0,63),$FF80BC40,TextureBuffer(tex)
Next
UnlockBuffer TextureBuffer(tex)
ScaleTexture tex,.01,.01
EntityTexture planet,tex
FreeTexture tex
gravity#=-.6
Collisions TPlayer,Tplanet,2,3
While Not KeyHit(1)
TurnEntity cam,MouseYSpeed()*.2,0,0
TurnEntity player,0,-MouseXSpeed()*.2,0
MoveMouse GraphicsWidth()*.5,GraphicsHeight()*.5
move=0
If KeyDown(200) MoveEntity player,0,0,1 move=1
If KeyDown(208) MoveEntity player,0,0,-1 move=1
If KeyDown(205) MoveEntity player,1,0,0 move=1
If KeyDown(203) MoveEntity player,-1,0,0 move=1
If MouseDown(2) MoveEntity player,0,8,0
dx#=EntityX(player,1)
dy#=EntityY(player,1)
dz#=EntityZ(player,1)
;ln#=Sqr(dx*dx+dy*dy+dz*dz)
ln#=EntityDistance(Player,planet)
dx=dx/ln
dy=dy/ln
dz=dz/ln
AlignToVector player,dx,dy,dz,2,1
;так пока реализована проверка на столкновение
If EntityCollided(player,Tplanet) ClearCollisions():Collisions TPlayer,Tplanet,2,1
If move ClearCollisions():Collisions TPlayer,Tplanet,2,3
MoveEntity player,0,gravity,0
UpdateWorld
RenderWorld
Text GraphicsWidth()*.5,GraphicsHeight()*.5,"+",1,1
Flip
Wend
End
Извините что кривой код, это пока так, набросок.