Andengine将OntouchEvent设置为子精灵

时间:2015-07-25 08:58:40

标签: android andengine

类ToolBar扩展了Sprite,这个类有按钮;

class ToolBar extends Sprite(){
    private Sprite button;
    public ToolBar(ITextureRegion toolbarimg,ITextureRegion buttonimg ,VertexBufferObjectManager pVertexBufferObjectManager){
        super(0,0,toolbarimg,pVertexBufferObjectManager);
        button = new Sprite(0,0,buttonimg,pVertexBufferObjectManager){
          @Override
          public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X, float Y) {
          .....
        }
        this.attachChild(button);
    }
}

该按钮出现在ToolBar精灵上。

我的问题是如何将按钮事件注册到按钮精灵。 在这种情况下,我无法使用 Scene.registerTouchArea 方法。 在这种情况下如何注册活动? 我是否必须将Scene对象传递给此Class并注册到场景?

1 个答案:

答案 0 :(得分:0)

您可以通过将工具栏注册为touchArea来执行此操作,然后覆盖onAreaTouched方法以调查是否有任何按钮位于点击的位置。

// In your ToolBar class:

@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
    final float[] touchAreaSceneCoordinates = this.convertLocalCoordinatesToSceneCoordinates(pTouchAreaLocalX, pTouchAreaLocalY);
    final float touchAreaSceneX = touchAreaSceneCoordinates[Constants.VERTEX_INDEX_X];
    final float touchAreaSceneY = touchAreaSceneCoordinates[Constants.VERTEX_INDEX_Y];

    if (pSceneTouchEvent.isActionDown()) {
        for (Button button: this.buttonsInYourToolBar) {
            if (button.contains(touchAreaSceneX, touchAreaSceneY)) {
                button.onPressed(); // deal with the click inside your Button class
            }
        }
    }
    return true;
}