Форум Flasher.ru

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

allex 08.11.2013 01:20

воздушный шар в box2d
 
Доброго времени суток уважаемые гуру.Хотел спросить,кто сталкивался в BOX2D с созданием тела (типа воздушный шарик) на которого не действует гравитация? Я сам использовал -
Код AS3:

SetLinearVelocity        ()

в eventframe ! Подбором подбирал силу,но тело как то дергается. Потом нашел такую запись -
Код:

b->ApplyForce( b2Vec2(0.0,9.8*b->GetMass()),b->GetWorldCenter()); // here 0.0 is x, 9.8 is y (the gravity)
перевёл в AS3 ,но тело тупа падает(((

Может, кто поможет,какой верный способ? Спасибо

caseyryan 08.11.2013 07:58

http://www.cocos2d-iphone.org/forums...n-air-objects/

allex 08.11.2013 10:18

caseyryan спасибо за ответ и ссылку,но в этом примере тоже самое,что и я предложил в своём вопросе.У меня ничего так не получилось,вы лично сами проверяли ваш пример или просто скинули ссылку? Спасибо

caseyryan 08.11.2013 11:39

Цитата:

вы лично сами проверяли ваш пример или просто скинули ссылку?
Не проверял. Необходимости не было.
Вообще, есть куча тем по созданию воздушного шара в бокс2д.
https://www.google.com/search?btnG=1...ot+air+balloon

С ApplyForce вариант тоже возможен. Там еще надо плотность тела поменять и массу

allex 08.11.2013 13:22

сделал так -
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.Event;
        import Box2D.Dynamics.*;
        import Box2D.Collision.*;
        import Box2D.Collision.Shapes.*;
        import Box2D.Common.Math.*;
        public class Main extends Sprite {
                private var world:b2World;
                private var worldScale:Number=30;
                private var theSphere:b2Body;
 
 
                public function Main() {
                        world=new b2World(new b2Vec2(0,10),true);
                        debugDraw();
                        floor();
 
 
                        sphere(170, 200, 40);
 
 
                        theSphere.ApplyForce(new b2Vec2(0, -10*theSphere.GetMass()),theSphere.GetPosition());
 
                        addEventListener(Event.ENTER_FRAME,updateWorld);
                }
                private function sphere(pX:int,pY:int,r:Number):b2Body {
                        var bodyDef:b2BodyDef=new b2BodyDef();
                        bodyDef.position.Set(pX/worldScale,pY/worldScale);
                        bodyDef.type=b2Body.b2_dynamicBody;
                        bodyDef.userData=pY;
                        var circleShape:b2CircleShape;
                        circleShape=new b2CircleShape(r/worldScale);
                        var fixtureDef:b2FixtureDef=new b2FixtureDef();
                        fixtureDef.shape=circleShape;
                        fixtureDef.density=1;
                        fixtureDef.restitution=0.4;
                        fixtureDef.friction=0.5;
                        theSphere=world.CreateBody(bodyDef);
                        theSphere.CreateFixture(fixtureDef);
                        return theSphere;
                }
                private function floor():void {
                        var bodyDef:b2BodyDef=new b2BodyDef();
                        bodyDef.position.Set(320/worldScale,465/worldScale);
                        var polygonShape:b2PolygonShape=new b2PolygonShape();
                        polygonShape.SetAsBox(320/worldScale,15/worldScale);
                        var fixtureDef:b2FixtureDef=new b2FixtureDef();
                        fixtureDef.shape=polygonShape;
                        fixtureDef.restitution=0.4;
                        fixtureDef.friction=0.5;
                        var theFloor:b2Body=world.CreateBody(bodyDef);
                        theFloor.CreateFixture(fixtureDef);
                }
                private function debugDraw():void {
                        var debugDraw:b2DebugDraw=new b2DebugDraw();
                        var debugSprite:Sprite=new Sprite();
                        addChild(debugSprite);
                        debugDraw.SetSprite(debugSprite);
                        debugDraw.SetDrawScale(worldScale);
                        debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
                        debugDraw.SetFillAlpha(0.5);
                        world.SetDebugDraw(debugDraw);
                }
                private function updateWorld(e:Event):void {
 
                        world.Step(1/30,10,10);
 
 
 
                        world.ClearForces();
                        world.DrawDebugData();
                }
 
        }
}

падает!!!! по идее как в гугле,но инфы не достаточно(

Добавлено через 5 часов 7 минут
В общем надо убрать - [AS3world.ClearForces();][/as3]

Но там не всё так просто,надо разбираться дальше)))

Еще интересная статья - http://www.emanueleferonato.com/2009...es-with-box2d/


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

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