1

私は現在、andEngine と box2d を紹介するためにいくつかのチュートリアルに従っています。バウンスしている間 (物理ワールドに登録されている)、オブジェクト (ボディに接続されたスプライト)をドラッグしたいと考えています。

キャラクターが動いているのを見ることができるようにドラッグしたいと思います。以下のようにコードをコメントした場合にのみ機能します(物理コネクタを登録している部分)。コメントを外すと、setPosition を除いて、すべてが機能します (たとえば、他のプロパティを設定しても)。-コードが ACTION_MOVE ケースに入っていると確信しています

質問 1:このアプローチが機能しないのはなぜですか? -スプライトではなく、ボディをドラッグする必要があるのでしょうか?

質問 2: onAreaTouched 内でボディを参照して操作を行うにはどうすればよいですか? - さまざまなアプローチを試しましたが、スプライトのみを宣言するときに onAreaTouch を作成する必要があるようです。

参照: http://stuartmct.co.uk/2012/07/18/andengine-touch-events-with-sprites-and-shapes/および AndEngine Book

Sprite sPlayer = new Sprite(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2,
                playerTextureRegion,
                this.mEngine.getVertexBufferObjectManager()) {
            @Override
            public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
                    final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
                Log.i(this.getClass().getName(), "area touched");
                switch (pSceneTouchEvent.getAction()) {
                case TouchEvent.ACTION_DOWN:
                    break;
                case TouchEvent.ACTION_UP:
                    break;
                case TouchEvent.ACTION_MOVE:
                    this.setPosition(pSceneTouchEvent.getX() - this.getWidth()
                            / 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
                    break;
                }

                return true;
            }
        };


        FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(10.0f, 0.75f,
                0.0f);
        // apply all forces, collisions to body - Dynamic
        Body body = PhysicsFactory.createCircleBody(physicsWorld, sPlayer,
                BodyType.DynamicBody, PLAYER_FIX);

次のコードでは、スプライトの位置を設定できません。

/*
        // relate to collisions after adding to scene
        physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer,
                body, true, true));

*/      

        this.scene.registerTouchArea(sPlayer);
        this.scene.setTouchAreaBindingOnActionDownEnabled(true);
        this.scene.attachChild(sPlayer);
4

1 に答える 1

2

あなたは行く必要があります

myPad.setTransform(pSceneTouchEvent.getX() - (this.getWidth() / 2), pSceneTouchEvent.getY() - (this.getHeight() / 2), 0);//the zero at the end is for setting the angle

box2d では、ボディと物理コネクタを移動する必要があるためです。

physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer, body, true, true));

スプライトをボディに追従させます。

于 2013-03-04T04:55:10.043 に答える