Я создал класс столкновений для обнаружения столкновений с использованием пикселей.В моем классе я также разработал некоторые функции для определения угла столкновения.Основываясь на этом, я создал несколько примеров:
http://megaswf.com/serve/25437/
http://megaswf.com/serve/25436/
(пространство для изменения силы тяжести, вправо / влево, чтобы придать мячу некоторую скорость.)
Как вы, вероятно, заметите, происходят странные вещи:
- Когда скорость мяча очень низкая
- Когда направление мяча почти касательнодо препятствия.
столкновение http://img514.imageshack.us/img514/4059/colisao.png
На изображении выше показано, как рассчитать угол столкновения.Я называю красные точки ключевыми точками.Я ищу максимальное количество ключевых точек (обычно 4).Если я нахожу более 2 ключевых точек, я выбираю 2 самые дальние (как показано на одном из синих объектов).Вот как я тогда нахожу нормальный угол, где на поверхности столкнулся объект.Я не знаю, является ли это устаревшим способом выполнения действий.
на основе этого угла я поворачиваю вектор скорости, чтобы выполнить подпрыгивание.
Кусок кода для выполнения математических операцийздесь:
static public function newSpeedVector(speedX: Number, speedY: Number, normalAngle: Number): Object{
var vector_angle: Number = Math.atan2(speedY, speedX) * (180/Math.PI);
var rotating_angle: Number = (2*(normalAngle - vector_angle) + 180) % 360;
var cos_ang: Number = Math.cos(rotating_angle/DEGREES_OF_1RAD);
var sin_ang: Number = Math.sin(rotating_angle/DEGREES_OF_1RAD);
var final_speedX: Number = speedX * cos_ang - speedY * sin_ang;
var final_speedY: Number = speedX * sin_ang + speedY * cos_ang;
return {x_speed: final_speedX, y_speed: final_speedY};
}
Вот как рассчитывается новый вектор скорости ...
Мой вопрос: кто-нибудь сталкивался с подобной проблемой или имеет представление о том, как ее избежать?от происходящего?