使用onAreaTouched with physics - AndEngine

时间:2013-07-25 21:57:31

标签: android andengine game-physics ontouchevent

我是AndEngine的新手,这是第一次尝试在游戏物理中使用触摸事件。我在mybringback AndEngine教程系列之后创建了这段代码。我创造了一个只在地面上上下跳动的精灵。我想要做的是整合触摸事件,以便用户可以拿起精灵(将它放在任何地方),然后让它掉到地上。

我有一个上下反弹的精灵,所以这很好但我的触摸事件不起作用。我对onAreaTouched进行了一些研究,但我认为我仍然不了解一些概念。如果有人能告诉我我做错了什么,那将非常感激。

这是我的onPopulateScene:

@Override
public void onPopulateScene(Scene pScene,

OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {


    final Sprite sPlayer = new Sprite(CAMERA_WIDTH / 2,CAMERA_HEIGHT / 2,
            playerTexureRegion, this.mEngine.getVertexBufferObjectManager()){
        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X, float Y) 
        {
            //Not sure if I'm doing this right
            if (pSceneTouchEvent.isActionUp())
            {
                this.setPosition(X, Y);


            }else if(pSceneTouchEvent.isActionDown())
            {
                this.setPosition(X, Y);
            }else if(pSceneTouchEvent.isActionMove())
            {
                this.setPosition(X, Y);
            }
            return true;
        };
    };


    sPlayer.setRotation(45.0f);


    final FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(10.0f,
            1.0f, 0.0f);
    Body body = PhysicsFactory.createCircleBody(physicsWorld, sPlayer,
            BodyType.DynamicBody, PLAYER_FIX);

    //Set touch Area here
    this.scene.registerTouchArea(sPlayer);

    this.scene.attachChild(sPlayer);
    physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer,
            body, true, false));
    pOnPopulateSceneCallback.onPopulateSceneFinished();

}

1 个答案:

答案 0 :(得分:2)

初看起来,你的触摸事件看起来是正确的 - 对于没有物理扩展的游戏。

在物理学中,你不想触摸/移动精灵本身,而是想要移动底层(不可见)物理体 - 由物理发动机处理的物理体,它对碰撞和<做出反应/ em>负责根据物理特性移动你的精灵。

所以,你试图通过移动精灵而不是你的身体来改变它。移动你的身体看看鼠标关节: