排队到多个点的移动是不准确的

时间:2014-12-22 06:32:30

标签: java sprite game-engine

我创建了一个方法,可以将精灵在任何方向上移动到一个恒定速度的点。然后,我为每个要移动的点添加了一个排队系统。

我的问题是如果一个点排队,通常只有第一个动作是正确的,那么精灵似乎会移动到其他点的随机位置。 奇怪的部分是如果我添加

if((int) x != (int) moveInfo.getTargetX() && (int) y != moveInfo.getTargetY()){
    ...
}else{
    this.setPosition(moveInfo.getTargetX(), moveInfo.getTargetY());
    ...
}

精灵在完成移动到其随机点后将其自身校正到其目标位置。我创建了一个调试器,它不是精灵图像偏移,因为x和y值是真实的。

以下是我创建的一些代码可能导致问题......

  

x和y是双打。

移动到点排队构造函数:

Queue<MoveInfo> moveTo = new LinkedList<MoveInfo>();

MoveTo类

private class MoveInfo{

    private double targetX, targetY;
    private double deltaX, deltaY;
    private double direction;
    private double speed;
    private boolean ai;

    public MoveInfo(double targetX, double targetY, double speed){
        this.targetX = targetX;
        this.targetY = targetY;
        this.speed = speed;
        this.deltaX = targetX - x;
        this.deltaY = targetY - y;
        calculateDirection();
        ai = false;
    }

    public void calculateDirection(){
        this.direction = Math.atan2(deltaX, deltaY);
    }

    ... //Setters and getters.
}

调用每次游戏更新:

private void moveToUpdate(){
    if(!spriteMoving && !moveTo.isEmpty()){
        if(!moveTo.peek().isAi()){
            moveInfo = moveTo.poll();
            spriteMoving = true;
            System.out.println("Next X"+moveInfo.targetX+" Y"+moveInfo.targetY);
        }
    }else if(spriteMoving && moveInfo != null){
        if((int) x != (int) moveInfo.getTargetX() && (int) y != moveInfo.getTargetY()){
            double nextY = y + (moveInfo.getSpeed() * Math.cos(moveInfo.getDirection()));
            double nextX = x + (moveInfo.getSpeed() * Math.sin(moveInfo.getDirection()));
            setPosition(nextX, nextY);
        }else{
            this.setPosition(moveInfo.getTargetX(), moveInfo.getTargetY());
            spriteMoving = false;
            moveInfo = null;
        }
    }
}

如果您希望查看代码的其他部分,请在评论中告知我们。

0 个答案:

没有答案