实体的Andengine触摸事件

时间:2014-03-12 19:24:27

标签: events touch entity andengine

我需要在一些扩展Entity类的类中添加一个触摸事件,但它似乎不起作用。

为Sprites,AnimatedSprites和基元做这样的事情就像一个魅力就像做一样:

Sprite s = new Sprite(...){
    public boolean onAreaTouched(...){
           ...
    return true;
    }
}
registerTouchArea(s);

但是当应用于实体或扩展实体的类时,这不起作用。

你知道在这种情况下应该做些什么吗? 甚至可以在Entity类上使用onAreaTouched吗?如果不是,那将是一个什么样的解决方法?

请帮忙

1 个答案:

答案 0 :(得分:0)

这很容易。请遵循以下代码

制作示例实体。代码是自我描述性的。

public class Example extends Entity implements IOnAreaTouchListener {

    public Rectangle aSprite;

    public Example(float pX, float pY,
            VertexBufferObjectManager pVertexBufferObjectManager) {

        // initialize  your sprite  & it's touch implementation
        aSprite = new Rectangle(pX, pY, 40, 40, pVertexBufferObjectManager) {

            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                    float pTouchAreaLocalX, float pTouchAreaLocalY) {

                if (pSceneTouchEvent.isActionUp()) {
                    Log.e("Rectangle aSprite", "isActionUp");
                    return true;
                }
                return false;
            }
        };

    }

    @Override
    public void onAttached() {

        super.onAttached();

    }

    @Override
    public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
            ITouchArea pTouchArea, float pTouchAreaLocalX,
            float pTouchAreaLocalY) {


        aSprite.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
                pTouchAreaLocalY);

        return false;
    }

}

自定义场景类或 onCreateScene ()中,写一下

    Example example = new Example(80, 80, getVertexBufferObjectManager());
    mCurrentScene.attachChild(example.aSprite);
    mCurrentScene.registerTouchArea(example.aSprite);