Показать сообщение отдельно
Старый 26.09.2007, 05:18   #13
dimond
Оператор ЭВМ
 
Регистрация: 14.09.2007
Сообщений: 27
Написано 2 полезных сообщений
(для 5 пользователей)
Re: Гравитация

Сообщение от 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
Извините что кривой код, это пока так, набросок.
(Offline)
 
Ответить с цитированием