![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2010
Сообщений: 137
|
При нажатии на ЛКМ из пистолета вылетает пуля. На данный момент она летит не очень быстро, и при столкновении с объектом делает определенные действия. Как сделать так, чтобы пуля летела очень быстро (например, если пистолет с одной стороны поля, а объект с другой), и через 1-2 кадра уже столкнулась с объектом. Проблема в том, что быстрый полет пули дает большой шанс того, что она пролетит насквозь объекта. Т.е. пуля - это небольшая точка, и если за кадр она будет пролетать по 100 (примерно) пикселей, то сами понимаете, то что было в этих 100 пикселях останется не тронутым. Пытался делать пулю длинной, чтобы её конец на следующий кадр оказался её началом, но тогда если я стрельну на 45 градусов (вид сверху), то область прорисовки покажет, какую огромную область занимает пуля. Тогда по объекту и целится не придется.
Вопрос в следующем, как реализовать такую стрельбу? Или в другом случае как сделать так, чтобы у пули была область прорисовки как на рисунке 1, а не как на рисунке 2 (красная область - область прорисовки; черное - пуля) Если кто-то менял понял, прошу помощи! ![]() |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
speedBulletVedroid = скорость полёта пули.
//Функция для работы с пулями ведроида: function movedBulletVedroid(argument,i) { //Если координата x больше, чем -1000, то: if(argument.x > -1000) { //Изменяю координату x у пули: argument.x -= speedBulletVedroid * Math.cos(argument.rotation * (Math.PI / 180)); //Изменяю координату y у пули: argument.y += speedBulletVedroid * Math.sin(argument.rotation * (Math.PI / -180)); //Изменяю угол поворота у пули: argument.rotation = arrayAngleBullet[i]; } //Если пуля находится в области НЛО, то: if(argument.x < ufo.x + ufo.width / 2 && argument.x > ufo.x - ufo.width / 2 && argument.y < ufo.y + ufo.height && argument.y > ufo.y) { //Если на сцене есть пуля, то: if(stage.contains(argument)) { //Воспроизвожу звук касания пули и НЛО: soundChannel = soundIron.play(); //Удаляю пулю со сцены: removeChild(argument); } } } |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 137
|
Благодарю за то, что правильно направили!) Сильно помучился без примера, но в итоге получилось).
|
|
|||||
|
Регистрация: Apr 2010
Сообщений: 137
|
Дело не в коде ведь было даже, так что и показать нечего было). Скрином показал).
|
|
|||||
|
Регистрация: Nov 2012
Сообщений: 31
|
Кстати, баллистическую траекторию сделать не так сложно. Простое квадратное уравнение. А какие возможности открываются...
![]() Разделите на два метода: 1. Анимация движения пули 2. Обнаружение попадания Первый метод оперирует шагом, в зависимости от скорости (FPS, полагаю, должен быть фиксированным - 25?) Второй метод - простая формула. И для прямой, и для гиперболы - определяет, находится ли объект на траектории полета пули. Если нельзя пренебречь движением объекта - тогда проверять, находится ли объект на траектории полета пули в новом местоположении. Тут частота может быть ниже, например 5-10Гц |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|