|
|
|||||
Регистрация: Jul 2012
Сообщений: 148
|
Неправильный расчет движения
По задумке, красный шар должен лететь по заданному вектору и попасть в зеленый круг. Но он бесстыдно косит, по чуть-чуть при любом векторе. В чем ошибка?
var r:Number = 150; var angle:Number = 0; var vx:Number = 1; var vy:Number = 0.5; var px:Number = 0; var py:Number = 0; addEventListener(Event.ENTER_FRAME, update); function update(e:Event):void { ball_mc.x += vx; ball_mc.y += vy; // Точка, в которую летит шар angle = Math.atan2(vy, vx); px = circle_mc.x + r * Math.cos(angle); py = circle_mc.y + r * Math.sin(angle); point_mc.x = px; point_mc.y = py; } |
|
|||||
Lorem ipsum
|
Что будет, если заменить эти строки
на эти ball_mc.x = circle_mc.x + vx / Math.sqrt(vx*vx + vy*vy) * r; ball_mc.y = circle_mc.y + vy / Math.sqrt(vx*vx + vy*vy) * r; Если этого не произошло — что-то вообще сильно не так. Если это произошло, то есть два варианта: 1. накапливается погрешность, связанная с тем, что координаты экранных объектов округляются до 1/20; это одна из причин, по которым рекомендуется отделять логику от отображения — если бы ты хранил координату в некой переменной, значение которой уже потом присваивал бы соотв. координате экранного объекта, этой проблемы не было бы; 2. ты забыл в самом начале задать стартовые координаты своему красному шару равные координатам центра твоего черного круга-орбиты (ну, я же не знаю, где у тебя этот центр, может не в нуле);
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jul 2012
Сообщений: 148
|
Zebestov, спасибо за проверку. Нашел ошибку. Я считаю вектор, идущий из центра circle_mc, а в тесте ball_mc у меня изначально стоит чуть в стороне от центра, отсюда и эта погрешность
|
Часовой пояс GMT +4, время: 17:40. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|