![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2009
Сообщений: 10
|
Вот уже второй день не могу сделать простой
физический движок во flash ![]() Памагите! Есть точка 1х1, имеющая какую-то начальную скорость и какой-то угол поворота (эти скорость и угол можно задавать). Точка находится внутри прямоугольника 300х1000 (вид сбоку).Нужно, чтобы эта точка имела ускорение свободного падения и отражалась от стенок. Никаких параметров больше нет, т.е. если точка падает вниз, то отразясь от пола она подлетит на такую же высоту. Буду очень благодарен за помощь! З.Ы. С Новым Годом всех ![]() |
|
|||||
|
ветеран форума
|
Если есть угол и скорость, раскладываем по X и Y. Сдвиг осуществляется на регулярной основе (каждый кадр или по таймеру) прибавлением к координатам точки текущей скорости по X и Y соответственно, а также прибавлением к скорости по Y некоторой постоянной величины(ускорение свободного падения). При сдвиге проверяем, не выходит ли точка за границы зоны. Если выходит, то отрисовываем на границе. Если врезалась в вертикальную стену - умножаем скорость по X на -1, если в горизонтальную - скорость по Y на -1.
__________________
4am is time to rock |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 10
|
ОК, выкладываю.
Код точки: onClipEvent (load) { v = 14; g = 0.98; a = 90; getx = _x; gety = _y; cx = 1; cy = 1; fcounter = 0; curg = 0; } onClipEvent (enterFrame) { if ((_x>=340) || (_x<=40 && _y>=340)) { cx = cx*-1; } if (_y>=740) { cy = cy*-1; curg = curg+g*fcounter; fcounter = 0; } _x = _x+v*Math.cos(a/180*Math.PI)*cx; _y = _y-(v*Math.sin(a/180*Math.PI)-curg)*cy+g*fcounter; fcounter = fcounter+1; } ![]() |
|
|||||
|
ветеран форума
|
Цитата:
P. S. onClipEvent - зло, не рекомендуется к использованию начиная с Flash MX 2004. Пишите хотя бы в кадрах - меньше будет проблем будущем
__________________
4am is time to rock |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 10
|
Доработал+упростил
![]() onClipEvent (load) { v = 14; g = 0.98; a = 20; getx = _x; gety = _y; vx = v*Math.cos(a/180*Math.PI); vy = -v*Math.sin(a/180*Math.PI); } onClipEvent (enterFrame) { _x = _x+vx; _y = _y+vy; vy = vy+g; if (_x<=40 && _y>=340) { vx = vx*-1; _x=40; } if (_x>=340) { vx = vx*-1; _x = 340; } if (_y>=740) { vy = vy*-1; _y = 740; } } ![]() Как исправить? |
|
|||||
|
ветеран форума
|
Вот так:
_x +=vx; _y +=vy; if (_x<=40 && _y>=340) { vx *=-1; _x=40 }else if (_x>=340) { vx *=-1; _x = 340 }else if (_y>=740) { vy *=-1; _y = 740 }else{ vy +=g; } ![]()
__________________
4am is time to rock |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 10
|
Хм, заменил
Но он, собака, все-равно ускоряется ![]() Вот что непонятно, если стартовая скорость по оси Y равна 0, то шарик НЕ ускоряется, а если НЕ равна 0, то ускоряется. Вкладываю Аутпуты с разным значением углов, чтобы понятнее объяснить в чем дело. Тут указано значение переменной vy |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 10
|
Ух, кажется решил проблему
![]() Дело было в возврате значения _y За счет этого, с каждым ударом об пол шарик двигался все выше и выше Теперь все в порядке, спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|