Показать сообщение отдельно
Старый 21.07.2010, 12:52
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 10  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
O God. Ну вы слишком боитесь физики, а там нет ничего сложного. Я посмотрел пример который был по ссылке,
машинка там движется просто отвратительно. Если ты хочешь как там то можешь просто переписывать как там.
Если ты хочешь NFS, то придется немного по разбираться, но ты не бойся это не сложно.

Тут все просто третий закон ньютона. Описывается легко. Жаль сюда нельзя вставлять картинки, ну придеться
скачаивать. В картинке №1 (До столкновения), машина летит в стену. И у нее есть скорость которую ты
описываешь. Когда ты описываешь движение машины, ты расскладываешь скорость на вектора, по Х и по У.

Код AS3:
radian = (gradus * Math.PI)/180;
speedX=speed*Math.cos(radian);
speedY=speed*Math.sin(radian);
На картинке я сделал тоже самое.Ну а третий закон ньютон:
Сила действия равна по модулю и противоположна по направлению силе противодействия.
После столкновения (Картинка №2), твой вектор скорости по х будет направлен в противоположную сторону. Он
изменит направление. В коде тебе надо просто домножить на -1, это же не сложно. При всем при этом скорость
по У останеться неизменной, а для этого тебе надо в коде сделать... да ничего с ней не делать.
Но это если абсолютно упругий удар.
Если ты хочешь делать абсолютно НЕ упругий удар. Надо домножить! на коэффициент упрогости, в данном случае
0. И твоя машина просто остановиться по Х. НО по У она продолжит движение. и будет двигаться вдоль стенки.
В реальной жизне этих крайних случаев не бывает, коэф упругости находиться между ними, между 0 и 1.
Например если ты сделаешь коэф 0.5, то это значит что твой вектор по оси Х будет 50 процентов от своей
велечины, тоенсть в 2 раза меньше Картинка №3. ИЛи ты сделаешь коэф 0.2, и тогда длинна вектора будет 20
процентов от нормальной длинны. В этом случае машина отскочит от стены, но не сильно. НАдо просто
домножить на коэф, это тоже не сложно.

Но почему машина останавливается при соударении со стенкой? Изза того, что о стенку есть трение. НУ я
думаю что тут не сложно догадаться, что скорость по оси У, в твоем случае она звузит speedY, надо
уменьшить на силу трения, а сила трения это сила реакции опоры умноженная на коэф трения. Это значит чем
сильней твоя машина влетит в стену, тем больше трения будет, тем больше она затормозит об стену, что
абсолютно логично и без формул. В твоем случае можешь просто поступить так, у тебя есть скорость по оси Х,
можно считать ее реакцией опоры, и умножать на коэффициент. Это и будет твоя сила, (Коэф меньше единицы)
Это означает что у тебя есть speedY из которую надо уменьшить на силу трения. Если у тебя машина движеться
вперед, то скорость по У положительная, и надо вычитать силу трения, а если машина двигалась назад, и
ударилась об стену, то скорость машина отрицательная, и значит надо прибавлять силу трения. Короче
скорость надо всегда уменьшать. В случае движения машины вперед: speedY - WallFriction (Это трение о
стену.), а WallFriction=speedX*m, m - это твой коэф. сам подберешь. Но вообще для всех поверхностей он
гостированный, и можешь легко найти в нете.

Ребята из Electronic Arts пошли еще дальше. У них машина разворачивается при столкновении. Ну это
происходит из-за трения. ТОесть получается так, что Все эти силы скоростей действую из центра масс, Ну примерный центр машины/коробки и тд. а сила трения реакции опоры, они действуют в точке соприкосновения. И это означает что та точка машины которая соприкосается со стеной, тормозит, а импульс у машины остался, и скорость его тянет вперед, только уже в другом месте, в центре машины, что создает момент вращения вокруг точки соприкосновения. Ну и разворачивает машину. Картинка #4.

НУ это как бы все изложено упрощенно, и не рассматриваются более замороченные моменты. ТАк что думай, что ты хочешь получить от игры.
Изображения
       


Последний раз редактировалось Tr1te; 21.07.2010 в 12:58.