1

これは、Sceneにスプライトを追加するための私のコードです。

    for (int i = 3; i <= cage.getDirtMeter(); i++) {
        Sprite dirtSprite = new Sprite(0, 0, Main.dirtTextureRegion,
                mainActivity.getVertexBufferObjectManager()) {
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                    float pTouchAreaLocalX, float pTouchAreaLocalY) {
                removeDirt(this);
                return true;
            }
        };
        float x = Utility.getRandomXWithinCamera(dirtSprite);
        float y = Utility.getRandomYWithinCamera(dirtSprite);

        dirtSprite.setPosition(x, y);
        this.registerTouchArea(dirtSprite);
        attachChild(dirtSprite);
    }

これが私のremoveDirtメソッドです

public void removeDirt(final Sprite sprite) {
    synchronized (this) {
        if (CoolDown.getSharedInstance().checkValidity()) {
            if (isCleanSelected) {
                Log.d("detach", "Calling remove dirt");
                cage.removeDirt();
                mainActivity.runOnUpdateThread(new Runnable() {
                    @Override
                    public void run() {
                        /* Now it is save to remove the entity! */
                        if (MainMenuScene.this.detachChild(sprite)) {
                            Log.d("detach", "detached Successfuly!");
                        }
                    }
                });
                updateMetersUI();
            }
        }
    }
}

removeDirtが呼び出された後、スプライトは画面に表示されませんが、スプライトが正常に削除されていても、スプライトonAreaTouchは引き続き呼び出されます。シーンからスプライトを完全に削除する方法についてのアイデア。ありがとう。そして私も試しました

 sprite.setVisible(false);
 sprite.clearEntityModifiers();
 sprite.setIgnoreUpdate(true);
 sprite.clearUpdateHandlers();
 sprite.reset();
 sprite.detachSelf();

しかしその後、onAreaTouchはまだ呼び出されています。

4

1 に答える 1

4

スプライトのタッチエリアをシーンから登録解除する必要があります。例えば

yourScene.unregisterTouchArea(yourSprite);
于 2012-07-30T05:57:48.903 に答える