#android #andengine #game-engine
#Android #andengine #игровой движок
Вопрос:
Я разрабатываю игру, в которой один игрок перемещается по экрану с помощью аналогового управления на экране.
Вражеские спрайты периодически добавляются в сцену, и они движутся к игроку. С помощью приведенного ниже кода добавляются враги.
public void addTarget() {
Random rand = new Random();
float x = ( camera.getWidth() resourcesManager.evilone_region.getWidth());
float minY = resourcesManager.evilone_region.getHeight();
int maxY = (int) (camera.getHeight() - resourcesManager.evilone_region
.getHeight());
int rangeY = (int) (maxY - minY);
float y = rand.nextInt(rangeY) minY;
target = new AnimatedSprite(x, y, resourcesManager.evilone_region.deepCopy(),vbom){
@Override
protected void preDraw(GLState pGLState, Camera pCamera)
{
super.preDraw(pGLState, pCamera);
pGLState.enableDither();
}
@Override
protected void onManagedUpdate(float pSecondsElapsed)
{
super.onManagedUpdate(pSecondsElapsed);
if(isPlayerMoved){
this.registerEntityModifier(new MoveModifier(2, target.getX(),player.getX(),target.getY(),player.getY()));
}
}
};
attachChild(target);
target.setCullingEnabled(true);
final long[] PLAYER_ANIMATE = new long[] {100, 100, 100};
target.animate(PLAYER_ANIMATE, 0, 2, true);
int minDuration = 2;
int maxDuration = 4;
int rangeDuration = maxDuration - minDuration;
int actualDuration = rand.nextInt(rangeDuration) minDuration;
mod = new MoveModifier(actualDuration, target.getX(),player.getX(),target.getY(),player.getY());
target.registerEntityModifier(mod.deepCopy());
TargetsToBeAdded.add(target);
}
private void createSpriteSpawnTimeHandler() {
float mEffectSpawnDelay = 1f;
eviloneTimerHandler = new TimerHandler(mEffectSpawnDelay, true,
new ITimerCallback() {
@Override
public void onTimePassed(TimerHandler pTimerHandler) {
if(isPaused){
}else{
//resourcesManager.targetbird.play();
addTarget();
}
}
});
engine.registerUpdateHandler(eviloneTimerHandler);
}
Теперь проблема в том, что когда я перемещаю плеер с аналоговым управлением, я хочу получить результат, поскольку каждый враг должен изменить направление и двигаться к игроку. Но при использовании этого кода каждый враг движется к первому добавленному врагу, и все они движутся к игроку, что выглядит очень странно, поскольку все они рушатся друг на друга.
Пожалуйста, помогите.
Ответ №1:
Вам не нужно напрямую перемещать своих врагов к игроку. Вы можете перемещать их на 5 пикселей при каждом обновлении или что-то в этом роде. Вот пример, но этот код должен быть улучшен:
@Override
protected void onManagedUpdate(float pSecondsElapsed)
{
super.onManagedUpdate(pSecondsElapsed);
if( player.getX() > target.getX() )
{
//Move your enemy 5 pixels to right
}
else
//Move your enemy 5 pixels to left
if( player.getY() > target.getY() )
{
//Move your enemy 5 pixels to down
}
else
//Move your enemy 5 pixels to up
}
Примечание: Не забудьте проверить, достиг ли целевой игрок. И прежде чем начать перемещать свою цель, проверьте, движется ли она в данный момент. Вы можете использовать логическое значение для его проверки. Надеюсь, это поможет.