2012-07-30 94 views
1

这是我在Scene上添加精灵的代码。onAreaTouch在成功分离精灵之后仍然被调用

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仍然被称为甚至精灵精灵正在顺利deAttached。任何想法如何从场景中完全删除精灵。谢谢。而且我也试过

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

但之后onAreaTouch仍然被调用。

回答

4

您需要从场景中取消注册Sprite的Touch Areas。 例如

yourScene.unregisterTouchArea(yourSprite); 
+0

工作就像一个魅力:)。谢谢! – Waqas 2012-07-30 06:00:07

相关问题