![]() |
|
||||||||||
|
|
|
|||||
|
Здравствуйте. Есть необходимость создать эффект конвеера с помощью Box2D. Была идея создать два кубика, которые бы изменяли по очереди свое положение. Но в таком случае нужна своего рода "маска", которая бы ограничивала область воздействия такого конвеера. Была идея создать крутящиеся колесика. Но и здесь проблема - тела будут дергаться вверх и вниз при попадании между колесиками. Думал сделать очень много маленьких колесиков, чтобы дергание не было - но это нагрузка на процессор.
Подскажите, пожалуйста как лучше сделать такую "движущуюся ленту".
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 70
|
http://flashgameblogs.ru/blog/box2d/915.html
Правда там мне не нравится, что изменяется сам box2d. Хотя, если разобраться, то можно сделать и без изменений внутренностей box2d.
__________________
Блог: http://devizgl.blogspot.com/ |
|
|||||
|
vizgl, спасибо за ответ. Я видел эту статью раньше, но мне тоже не понравилась идея.
Как я решил проблему. Просто создал тело (прямоугольник, дальше конвеер), и начал "слушать" столкновения других тел с этим прямоугольником. Если что-то столкнулось с конвеером, то придавал этому (другому телу) силу, чтобы его уносило в сторону: Вот отрывок из класса унаследованного от b2ContactListener. Кто работал с Box2D должен знать что это - объяснять не буду: 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; } } }
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 239
|
только тут получается "сила" прикладывается не в точке контакта, а в центр масс. Вряд ли это будет нормально выглядеть кода, например, ящик падает на конвейер углом. по идее когда ящик падает углом на движующийся контейнер, в вашем случае, он получит угловую скорость направленную против часовой стрелки... в вашем исходнике, получится наоборот
|
|
|||||
|
Регистрация: Apr 2012
Сообщений: 239
|
я в играх такие вещи сразу замечаю =) главное - это мелочи
|
|
|||||
|
К стати! Только что заметил, что если падающее на конвеер тело изначально имеет скорость по "х" то, находясь на конвеере - силы суммируются, что не очень хорошо. Если будет время и желание попробую что-то похимичить. Если получится - отпишусь.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 239
|
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|