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

собрал через AlignToVector
для упрощения координаты планеты 0,0,0

dx#=EntityX(player,1)
dy#=EntityY(player,1)
dz#=EntityZ(player,1)
ln#=Sqr(dx*dx+dy*dy+dz*dz)
dx=dx/ln
dy=dy/ln
dz=dz/ln
AlignToVector player,dx,dy,dz,2,1

Теперь работает как надо, но есть две проблемы.

1) игрока тянет к полюсам, иду я к примеру от одного полюса к другому, до экватора игрок замедляется, а после ускоряет ход.

2) такая фишка как Collisions tplayer,tplanet,2,3 - "защита от скольжения вниз" не действует. Походу этот самый "вниз" глобальный, а нужно чтобы проверка была по локальной оси Y игрока. В итоге игрок скольэит так, если бы я писал Collisions tplayer,tplanet,2,2, особенно это заметно на рельефной местности.

пробовал так

If EntityCollided(player,tplanet) ClearCollisions():Collisions tplayer,tplanet,2,1

If move ClearCollisions():Collisions tplayer,tplanet,2,3

но думаю это не выход т.к. могут быть еще сторонние коллизии, не относящиеся к игроку (пуля-бот к примеру) а ClearCollisions() стирает все, но без нее нельзя применить новые установки.

еще записывал координаты игрока до UpdateWorld а потом после и вычислял разницу. И если игрок скользил сам, (работа коллизии) то получалось некоторое значение отличное от нуля, но так до ума это дело не довел.
(Offline)
 
Ответить с цитированием