在AndEngine中需要有关Sprite Movements的帮助

时间:2014-06-20 11:22:54

标签: android andengine game-engine


我正在开发一款游戏,通过屏幕模拟控制我可以让一个玩家在屏幕上移动 敌人的精灵定期在场景中加入,他们会向玩家移动。通过使用下面的代码,敌人会被添加。

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 个答案:

答案 0 :(得分: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
        }

注意:别忘了检查目标是否达到了玩家。在开始移动目标之前,检查它是否正在移动。您可以使用布尔值来进行chechk。希望它有所帮助。