3

私は 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;
        }
    };

そして、ラジオボタンをタッチすると、「タッチ」メッセージが表示され、2回目のタッチ後に表示されないため、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;
}

しかし、以前のバージョンは別のプロジェクトで動作していたため、何が問題だったのかはまだわかりません。誰かが私にそれを説明できますか?

4

1 に答える 1

0

スプライト タッチ エリアをメイン シーンに登録していないと思います。これを行うだけです。getEngine().getScene().registerTouchArea(blackRadioNotSelected);

于 2013-07-17T05:05:41.117 に答える