Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] Прицеливание перед выстрелом (http://www.flasher.ru/forum/showthread.php?t=175396)

razer89 16.02.2012 03:23

Прицеливание перед выстрелом
 
Доброго времени суток!
Пишу игру, в которой нужно стреляться "снарядами", гравитации нет, запускаются они с помощью ApplyImpulse. Тела при взаимодействии с другими телами (как статическими, так и динамическими), должны отскакивать. Так вот - перед выстрелом хочу прорисовывать траекторию полета снаряда, причем вплоть до 2 - 3 столкновений с другими объектами, дальше рисовать не нужно. Сразу предупрежу - рассчитывать все ручками - гиблое дело, т.к. уровни чрезвычайно разнообразны. Отрисовывать в фоне за пределами сцены - слишком медленно. Можно ли это устроить средствами Box2d? Заранее благодарен!

anmelegov 17.02.2012 00:30

а что мешает запустить "пулю" и отрисовать её путь? по моему самый простой способ

zmeevolk 22.02.2012 21:13

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

Код AS3:

var _traectorySprite:Sprite = new Sprite();
_traectorySprite.graphics.clear();
_traectorySprite.graphics.lineStyle(1,0x000000);
_traectorySprite.graphics.beginFill(0xff0000);
for (var i:int=1; i<=150; i++) {
  world.Step(1/30,10,10);
  _traectorySprite.graphics.drawCircle(myBullet.GetPosition().x*worldScale, myBullet.GetPosition().y*worldScale,2);
  world.ClearForces();
}
_traectorySprite.graphics.endFill();
world.DestroyBody(myBullet);

Добавлено через 2 минуты
Цитата:

Сообщение от anmelegov (Сообщение 1063536)
а что мешает запустить "пулю" и отрисовать её путь? по моему самый простой способ

ааа, +1, коллега уже ответил.Извините не заметил. Может быть подробный ответ поможет кому-то еще.

А ну и имхо, я бы делал выстрел через SetLinearVelocity а не импульсом

anmelegov 24.02.2012 14:00

делать надо точно так же как и стреляешь и точно таким же снарядом иначе при рикошете не совпадет тангенсальный импульс и траектория будет неправильной

Добавлено через 1 минуту
SetLinearVelocity это то же самое что импульс в центр масс

zmeevolk 24.02.2012 16:35

Цитата:

Сообщение от anmelegov (Сообщение 1065149)
делать надо точно так же как и стреляешь и точно таким же снарядом иначе при рикошете не совпадет тангенсальный импульс и траектория будет неправильной

Именно это я и хотел сказать, извините если что-то непонятно. Вестимо фейковый снаряд должен быть идентичный тому, что вылетает из пушки.

Цитата:

Сообщение от anmelegov (Сообщение 1065149)
SetLinearVelocity это то же самое что импульс в центр масс

Мне всегда казалось что SetLinearVelocity резко меняет скорость тела, а импульс или форс нет. Хотя для тела в состоянии покоя может и разницы нет.

anmelegov 28.02.2012 04:36

Цитата:

Apply an impulse at a point. This immediately modifies the velocity. It also modifies the angular velocity if the point of application is not at the center of mass. This wakes up the body.
- из руководства... хотя это понятно итак
Код AS1/AS2:

public function ApplyImpulse(impulse:b2Vec2, point:b2Vec2) : void{
                if (m_type != b2_dynamicBody)
                {
                        return;
                }
 
                if (IsAwake() == false)
                {
                        SetAwake(true);
                }
                //m_linearVelocity += m_invMass * impulse;
                m_linearVelocity.x += m_invMass * impulse.x;
                m_linearVelocity.y += m_invMass * impulse.y;
                //m_angularVelocity += m_invI * b2Cross(point - m_sweep.c, impulse);
                m_angularVelocity += m_invI * ((point.x - m_sweep.c.x) * impulse.y - (point.y - m_sweep.c.y) * impulse.x);
        }

Добавлено через 1 минуту
m_invMass это 1 поделить на массу


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

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