0

starling + as3 を使用して、モバイル アプリでステージ ウォールとボックスを内部に作成します。

さて、アプリをテストすると、箱は落ちますが、オフセットがあるかのように、壁と一致しません。

https://www.dropbox.com/s/hd4ehnfthh0ucfm/box.png

ボックス(壁とボックス)の作成方法は次のとおりです。

オフセットが隠されているように見えますが、どう思いますか?

public function createBox(x:Number, y:Number, width:Number, height:Number, rotation:Number = 0, bodyType:uint = 0):void {

            /// Vars used to create bodies
            var body:b2Body;
            var boxShape:b2PolygonShape;
            var circleShape:b2CircleShape;

               var fixtureDef:b2FixtureDef = new b2FixtureDef();
            fixtureDef.shape = boxShape;
            fixtureDef.friction = 0.3;
            // static bodies require zero density
            fixtureDef.density = 0;

             var quad:Quad;

                bodyDef = new b2BodyDef();               
                bodyDef.type = bodyType;
                bodyDef.position.x = x / WORLD_SCALE;
                bodyDef.position.y = y / WORLD_SCALE;

                // Box
                boxShape = new b2PolygonShape();
                boxShape.SetAsBox(width / WORLD_SCALE, height / WORLD_SCALE);
                fixtureDef.shape = boxShape;
                fixtureDef.density = 0;
                fixtureDef.friction = 0.5;
                fixtureDef.restitution = 0.2;

                // create the quads
                quad = new Quad(width, height, Math.random() * 0xFFFFFF);

                quad.pivotX = 0;
                quad.pivotY = 0;


                // this is the key line, we pass as a userData the starling.display.Quad
                bodyDef.userData = quad;

                //
                body = m_world.CreateBody(bodyDef);
                body.CreateFixture(fixtureDef);

                body.SetAngle(rotation * (Math.PI / 180));

                _clipPhysique.addChild(bodyDef.userData);   

        }
4

1 に答える 1

0

SetAsBox メソッドは、半分の幅と半分の高さをパラメーターとして取ります。グラフィックがbox2dのボディと一致していないと思います。したがって、グラフィックを 2 倍の大きさにするか、SetAsBox パラメータを 0.5 倍にする必要があります。また、ボディ ピボットはその中心にあるため、ピボットの位置に応じてムービークリップをオフセットします。

box2d には、何が起こっているかを確認するために体の輪郭を描くことができる debugrenderer があることに注意してください。

于 2013-09-26T00:05:21.103 に答える