Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Мгновенный полет пули (http://www.flasher.ru/forum/showthread.php?t=188333)

TurboDizel 01.12.2012 21:50

Мгновенный полет пули
 
Вложений: 1
При нажатии на ЛКМ из пистолета вылетает пуля. На данный момент она летит не очень быстро, и при столкновении с объектом делает определенные действия. Как сделать так, чтобы пуля летела очень быстро (например, если пистолет с одной стороны поля, а объект с другой), и через 1-2 кадра уже столкнулась с объектом. Проблема в том, что быстрый полет пули дает большой шанс того, что она пролетит насквозь объекта. Т.е. пуля - это небольшая точка, и если за кадр она будет пролетать по 100 (примерно) пикселей, то сами понимаете, то что было в этих 100 пикселях останется не тронутым. Пытался делать пулю длинной, чтобы её конец на следующий кадр оказался её началом, но тогда если я стрельну на 45 градусов (вид сверху), то область прорисовки покажет, какую огромную область занимает пуля. Тогда по объекту и целится не придется.
Вопрос в следующем, как реализовать такую стрельбу? Или в другом случае как сделать так, чтобы у пули была область прорисовки как на рисунке 1, а не как на рисунке 2 (красная область - область прорисовки; черное - пуля)

Если кто-то менял понял, прошу помощи! :)

КорДум 01.12.2012 22:06

Математикой считаете пересечение прямой траектории пули с целью-врагом — так узнаете, было ли столкновение. Пуля летит не дальше координат врага, после чего пропадает (просто для наглядности и красоты).

Dip52 01.12.2012 23:04

speedBulletVedroid = скорость полёта пули.
Код AS3:

//Функция для работы с пулями ведроида:
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);
                }
        }
}


TurboDizel 02.12.2012 00:15

Цитата:

Сообщение от КорДум (Сообщение 1107296)
Математикой считаете пересечение прямой траектории пули с целью-врагом — так узнаете, было ли столкновение. Пуля летит не дальше координат врага, после чего пропадает (просто для наглядности и красоты).

Благодарю за то, что правильно направили!) Сильно помучился без примера, но в итоге получилось).

КорДум 02.12.2012 01:27

Рад, что получилось. Вы тоже не предоставили кода =)

TurboDizel 02.12.2012 03:38

Цитата:

Сообщение от КорДум (Сообщение 1107323)
Рад, что получилось. Вы тоже не предоставили кода =)

Дело не в коде ведь было даже, так что и показать нечего было). Скрином показал).

Ленок 02.12.2012 17:28

Кстати, баллистическую траекторию сделать не так сложно. Простое квадратное уравнение. А какие возможности открываются... :)

Разделите на два метода:
1. Анимация движения пули
2. Обнаружение попадания

Первый метод оперирует шагом, в зависимости от скорости (FPS, полагаю, должен быть фиксированным - 25?)
Второй метод - простая формула. И для прямой, и для гиперболы - определяет, находится ли объект на траектории полета пули. Если нельзя пренебречь движением объекта - тогда проверять, находится ли объект на траектории полета пули в новом местоположении. Тут частота может быть ниже, например 5-10Гц


Часовой пояс GMT +4, время: 17:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.