【问题标题】:AndEngine: UI is not updating in onAreaTouched callAndEngine:用户界面未在 onAreaTouched 调用中更新
【发布时间】:2012-09-14 13:31:54
【问题描述】:

我正在使用 AndEngine,并且我的自定义单选按钮有以下代码:

    blackRadioNotSelected = new Sprite(0, 0, blackRadio, vertexBufferObjectManager) {
        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
            if (pSceneTouchEvent.isActionUp()) {
                activity.runOnUpdateThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG,"touch");
                        unregisterTouchArea(blackRadio);
                        detachChild(whiteRadio);
                        detachChild(blackRadio);
                        whiteRadio = whiteRadioNotSelected;
                        blackRadio = blackRadioSelected;
                        registerTouchArea(whiteRadio);
                        attachChild(whiteRadio);
                        attachChild(blackRadio);
                    }
                });


                isWhiteSelected = !isWhiteSelected;
            }
            return false;
        }
    };

当我触摸单选按钮时,我可以看到“触摸”消息,并且在第二次触摸后它不会显示 - 所以,unregisterTouchArea(blackRadio); 被执行。但 UI 仍然相同:whiteRadio 看起来像是选中的,而 blackRadio - 未选中。会是什么?

UPD:我尝试将此代码放入其他方法中,一切正常。这就是现在的样子:

    blackRadioNotSelected = new Sprite(0, 0, blackRadio, vertexBufferObjectManager) {
        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
            if (pSceneTouchEvent.isActionUp()) {
                swapColor();
            }
            return false;
        }
    };

还有swapColor();

private void swapColor() {
    if (isWhiteSelected) {
        activity.runOnUpdateThread(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG,"blackNotSelected");
                unregisterTouchArea(blackRadio);
                detachChild(whiteRadio);
                detachChild(blackRadio);
                whiteRadio = whiteRadioNotSelected;
                blackRadio = blackRadioSelected;
                registerTouchArea(whiteRadio);
                attachChild(whiteRadio);
                attachChild(blackRadio);
            }
        });
    } else {
        [...]
    }


    isWhiteSelected = !isWhiteSelected;
}

但我仍然不知道出了什么问题,因为以前的版本在其他项目中工作。谁能给我解释一下?

【问题讨论】:

  • 这可能是因为您没有在 if(pSceneTouchEvent.isActionUp()) 块内返回 true

标签: android andengine


【解决方案1】:

我认为您尚未将精灵触摸区域注册到主场景中。 简单地做这个。 getEngine().getScene().registerTouchArea(blackRadioNotSelected);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多