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

HardCoder 01.07.2012 01:35

Как создать конвеер
 
Здравствуйте. Есть необходимость создать эффект конвеера с помощью Box2D. Была идея создать два кубика, которые бы изменяли по очереди свое положение. Но в таком случае нужна своего рода "маска", которая бы ограничивала область воздействия такого конвеера. Была идея создать крутящиеся колесика. Но и здесь проблема - тела будут дергаться вверх и вниз при попадании между колесиками. Думал сделать очень много маленьких колесиков, чтобы дергание не было - но это нагрузка на процессор.
Подскажите, пожалуйста как лучше сделать такую "движущуюся ленту".

vizgl 02.07.2012 05:53

http://flashgameblogs.ru/blog/box2d/915.html
Правда там мне не нравится, что изменяется сам box2d. Хотя, если разобраться, то можно сделать и без изменений внутренностей box2d.

HardCoder 07.07.2012 14:03

vizgl, спасибо за ответ. Я видел эту статью раньше, но мне тоже не понравилась идея.
Как я решил проблему. Просто создал тело (прямоугольник, дальше конвеер), и начал "слушать" столкновения других тел с этим прямоугольником. Если что-то столкнулось с конвеером, то придавал этому (другому телу) силу, чтобы его уносило в сторону:
Вот отрывок из класса унаследованного от b2ContactListener. Кто работал с Box2D должен знать что это - объяснять не буду:
Код AS3:

override public function BeginContact(contact:b2Contact):void {
        var bodyA:b2Body = contact.GetFixtureA().GetBody();
        var bodyB:b2Body = contact.GetFixtureB().GetBody();
        var dataA:Object = bodyA.GetUserData();
        var dataB:Object = bodyB.GetUserData();
        if (bodyA && bodyB) {
                if (dataA == "conveyer") {
                        bodyB.GetLinearVelocity().x += 2;
                } else if (dataB == "conveyer") {
                        bodyA.GetLinearVelocity().x += 2;
                }
        }
}

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

gagaga 08.07.2012 11:14

только тут получается "сила" прикладывается не в точке контакта, а в центр масс. Вряд ли это будет нормально выглядеть кода, например, ящик падает на конвейер углом. по идее когда ящик падает углом на движующийся контейнер, в вашем случае, он получит угловую скорость направленную против часовой стрелки... в вашем исходнике, получится наоборот

HardCoder 08.07.2012 11:58

Вложений: 1
Возможно вы правы, но, на это можно не обращать внимания. Вот наглядный пример, красиво и реалистично смотрится:

gagaga 08.07.2012 14:09

я в играх такие вещи сразу замечаю =) главное - это мелочи

HardCoder 08.07.2012 14:34

К стати! Только что заметил, что если падающее на конвеер тело изначально имеет скорость по "х" то, находясь на конвеере - силы суммируются, что не очень хорошо. Если будет время и желание попробую что-то похимичить. Если получится - отпишусь.

gagaga 13.07.2012 14:13

http://flashgameblogs.ru/blog/box2d/915.html


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

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