【问题标题】:Android (andengine + box2d) beginner - drag an object (sprite/body)Android (andengine + box2d) 初学者 - 拖动一个对象(sprite/body)
【发布时间】:2013-01-05 02:37:06
【问题描述】:

我目前正在学习一些教程来介绍 andEngine 和 box2d,我想拖动一个 对象(附加到身体的精灵),同时它正在弹跳(它已注册到物理世界)。

我想拖动,这样我可以看到我的角色在移动。只有当我将代码注释如下(我正在注册物理连接器的部分)时,它才有效。如果我取消注释,一切都会正常工作(例如,即使我设置了其他属性),除了 setPosition!! - 我确定代码正在进入 ACTION_MOVE 案例

问题 1:为什么这种方法不起作用? - 也许我必须拖动身体而不是精灵?

问题 2: 如何在 onAreaTouched 内引用 body 并在其中进行操作? - 我尝试了许多不同的方法,但似乎你必须在仅声明精灵时创建 onAreaTouch。

参考:http://stuartmct.co.uk/2012/07/18/andengine-touch-events-with-sprites-and-shapes/ 和 AndEngine 书

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);

下面的代码不允许我设置 Sprite 的位置:

/*
        // 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);

【问题讨论】:

    标签: android box2d andengine


    【解决方案1】:

    你得走了

    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));

    将使精灵跟随身体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多