2013-07-30 42 views
0

我使用2個UpdateHandlers一次加精靈設置到2秒的TimerHandler,另一個刪除精靈(即相撞的),每幀上的更新。 的問題是,應該刪除精靈更新處理程序依賴於「TimerSeconds」參數(在這種情況下2秒)。因此,如果我將TimerSeconds設置爲10s,那麼碰撞的sprites不會被刪除。Andengine UpdateHandler

this.registerUpdateHandler(new TimerHandler(2f,true, new ITimerCallback(){ 
     @Override 
     public void onTimePassed(final TimerHandler pTimerHandler) { 

      final FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(25.0f, 1.0f, 0.25f); 
      Sprite redBombSprite = new Sprite(SceneManager.CAMERA_WIDTH/2,SceneManager.CAMERA_HEIGHT/8,bombTextureRegion,engine.getVertexBufferObjectManager()); 
      redBombSprite.setX(redBombSprite.getX()-redBombSprite.getWidth()/2); 
      redBombSprite.setY(redBombSprite.getY()-redBombSprite.getHeight()/2); 
      redBombSprite.setRotation(35.0f); 
      attachChild(redBombSprite); 
      float x = MathUtils.random(-600f,600f); 
      float y = MathUtils.random(-600f,600f); 
      Vector2 impulse = new Vector2(x,y); 
      Body redBomb = PhysicsFactory.createBoxBody(physicsWorld, redBombSprite, BodyType.DynamicBody, PLAYER_FIX); 

      redBomb.setAttachedSprite(redBombSprite); 
      redBomb.applyLinearImpulse(impulse, redBomb.getPosition()); 
      redBomb.setUserData("bomb"); 


      redBombs.add(redBomb); 
      physicsWorld.registerPhysicsConnector(new PhysicsConnector(redBombSprite, redBomb, true, true)); 

      } 

     })); 

刪除相撞精靈:

public IUpdateHandler getCollisionUpdateHandler(){ 
     return new IUpdateHandler(){ 

     @Override 
     public void onUpdate(float pSecondsElapsed) { 

      for(int i=0;i<redBombs.size()-1;i++) { 
       if(redBombs.get(i).getAttachedSprite().isDelete()){ 
        final Sprite Object = redBombs.get(i).getAttachedSprite(); 
        redBombs.remove(i); 
        final Body body = physicsWorld.getPhysicsConnectorManager().findBodyByShape(Object); 
        physicsWorld.destroyBody(body); 
        detachChild(Object); 

       } 

      } 

      } 

謝謝你在前進,而遺憾的複雜代碼。

回答

1

爲了檢查精靈碰撞,使用collidesWith像sprite1.collidesWith(sprite2)()方法

使用上述方法TimeHandler。取決於時間通(2F或10F按照您的要求) collidesWith運行的方法。所以,你可以我使用ContactListener碰撞檢測在幾秒鐘後刪除精靈..

+0

。第二個UpdateHandler只是從列表和物理世界中刪除它們。我遇到的問題是,當新的幀更新時,他們不會被刪除,只有當其他計時器滴答時纔會被刪除。 – user2633914