【问题标题】:Andengine set OntouchEvent to child spriteAndengine 将 OntouchEvent 设置为子精灵
【发布时间】:2015-07-25 08:58:39
【问题描述】:

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

按钮出现在工具栏精灵上。

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

【问题讨论】:

  • 你为什么不直接在工具栏上设置触摸呢?毕竟它扩展了精灵。
  • 为什么不能使用 Scene.registerTouchArea?

标签: android andengine


【解决方案1】:

您可以通过将工具栏注册为 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多