Форум 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=147263)

SmartFox 30.11.2010 17:21

Отключение гравитации для конкретного объекта.
 
Здравствуйте.

Вопрос: как сделать так, чтобы гравитация не действовала на некоторые
избранные тела, но действовала на все остальные?

Первое, что приходит на ум, это компенсировать силу гравитации равной ей по модулю,но
противоположенно направленной силой с помощью функции ApplyForce.

Инициализация:
Код AS3:

                        var env:b2AABB = new b2AABB ();
                        env.lowerBound.Set (-100.0, -100.0);
                        env.upperBound.Set (100.0, 100.0);
                        var gravity:b2Vec2 = new b2Vec2 (0.0, 10.0);
                        m_b2dWorld = new b2World (env, gravity, true);
                        ...

В каждом фрейме:
Код AS3:

                        m_b2dWorld.Step(1/24, 30);
                        var body = m_b2dWorld.GetBodyList();
                        while (body)
                        {
                                body.ApplyForce (new b2Vec2 (0, -10), body.GetPosition ());
                                //body.SetLinearVelocity (new b2Vec2 (0, 0));
                                body = body.GetNext ();
                        }

Получается странно: некоторые тела улетают вверх подобно ракетам,
в тоже время другие - падают вниз как обычно.

Второй попыткой было обнуление y-составляющей линейной скорости.
В этом случае тела медленно, словно перышки, но опускаются на землю.

Подскажите, пожалуйста, как решить данную проблему.

-De- 01.12.2010 12:47

Гравитация - это ускорение свободного падения, а не сила.
Код AS3:

body.ApplyForce (new b2Vec2 (0, -10*body.GetMass()), body.GetPosition ());


SmartFox 02.12.2010 16:42

Вооот я тупанул!
Огромное спасибо, -De-!
А то я уже внутрь Box2D полез отключать.


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

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