Я создаю игру, используя Andengine, и в этом хочу, чтобы объект летал в небе, чтобы сбросить бомбы внизу. В настоящее время я использую обработчик времени для создания как летающего объекта, так и бомб. Но он не работает должным образом. Проблемы, с которыми я столкнулся:
1) Иногда вместо одной бомбы отбрасываются 2 или 3 бомбы.
2) И объекты бомбы также не перерабатываются. Код для рециркуляции объекта вызван, но он, похоже, не работает.
Я заметил одно: предположим, изначально у меня есть один летающий объект, который бросает бомбу. Когда бомба покидает экран, код рециркуляции для объекта бомбы вызывается один раз. И когда-то, когда летающий объект покидает экран, он также перерабатывается. Теперь, когда создается еще один летающий объект и он бросает бомбу, код для утилизации бомбы получает дважды. Затем для третьего летающего объекта код для утилизации одной бомбы получает трижды и так далее.
AndEngine перемещать два объекта одновременно
Код для добавления летающий объект выглядит следующим образом
private void createDragonHandler() {
TimerHandler spriteTimerHandler;
float mEffectSpawnDelay = 10f;
spriteTimerHandler = new TimerHandler(mEffectSpawnDelay, true,
new ITimerCallback() {
@Override
public void onTimePassed(TimerHandler pTimerHandler) {
addDragon();
}
});
getEngine().registerUpdateHandler(spriteTimerHandler);
}
public void addDragon() {
Dragon dragon = (Dragon) dragonSpritePool.obtainPoolItem();
if (dragon.getParent() != mainScene)
mainScene.attachChild(dragon);
}
public synchronized Dragon obtainPoolItem() {
dragon = super.obtainPoolItem();
Random rand = new Random();
final int x = (int) (CAMERA_WIDTH + resourceManager.dragonTextureRegion
.getWidth());
int minY = (int) resourceManager.dragonTextureRegion.getHeight();
int maxY = (int) (CAMERA_HEIGHT/2 - resourceManager.dragonTextureRegion
.getHeight());
int rangeY = maxY - minY;
final int y = rand.nextInt(rangeY) + minY;
dragon.reset();
dragon.setVisible(true);
dragon.setIgnoreUpdate(false);
dragon.animate(150);
dragon.setPosition(x, y);
MoveXModifier mod = new MoveXModifier(15, dragon.getX(),
-dragon.getWidth());
float mEffectSpawnDelay = 5f;
TimerHandler spriteTimerHandler = new TimerHandler(mEffectSpawnDelay,
true, new ITimerCallback() {
@Override
public void onTimePassed(TimerHandler pTimerHandler) {
DragonFire dragonFire = BirdShoot.dragonFireSpritePool
.obtainPoolItem(dragon.getX(), dragon.getY());
BirdShoot.mainScene.attachChild(dragonFire);
}
});
dragon.registerEntityModifier(mod.deepCopy());
dragon.setNoHit(0);
PhysicsHandler mPhysicsHandler;
mPhysicsHandler = new PhysicsHandler(dragon);
dragon.setPhysicsHandler(mPhysicsHandler);
dragon.registerUpdateHandler(dragon.getmPhysicsHandler());
BirdShoot.engine.registerUpdateHandler(spriteTimerHandler);
return dragon;
}
`
я хотел бы предложить U, чтобы получить возможность отправлять уры вопроса на HTTP: // WWW .andengine.org/forums – KOTIOS
Он уже существует http://www.andengine.org/forums/tutorials/binding-two-objects-together-t12520.html, но ответа не получил :( – Chetna
, пожалуйста, посмотрите на общий пул в andengine .. –