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);
}
}
}
謝謝你在前進,而遺憾的複雜代碼。
。第二個UpdateHandler只是從列表和物理世界中刪除它們。我遇到的問題是,當新的幀更新時,他們不會被刪除,只有當其他計時器滴答時纔會被刪除。 – user2633914