繁体   English   中英

轻微改变轨迹的移动物体

[英]Issues moving objects with a trail with slight change

因此,我一直在尝试修改我的代码,而我对为什么我的代码从完全从一种工作方式转变为通过这么小的更改而完全不同的事情感到困惑。 我一直在调试此功能并更改了非常小的内容,但是当我进行更改时,路径变得拥挤而不是保持距离。

目标:我试图弄清楚为什么微小的变化会拖累步道而不是保持距离。

在次要代码更改之前,玩家就是在这里移动的,这很正常。

public void Move(int delta){
    float moveSpeed = playerSpeed * delta;
    if(IsMoving() && 
            (player.get(0).getX() == playerDest.get(0).getX()) &&
            (player.get(0).getY() == playerDest.get(0).getY())){
        for(int i = 1; i < getSize(); i++){
            if(playerDest.get(i).getX() != player.get(i-1).getX()){
                playerDest.get(i).setX(player.get(i - 1).getX());
            }
            else if(playerDest.get(i).getY() != player.get(i-1).getY()){
                playerDest.get(i).setY(player.get(i - 1).getY());
            }
        }

        if(left){
            playerDest.get(0).setX(player.get(0).getX() - blockSize);
        }
        else if(right){
            playerDest.get(0).setX(player.get(0).getX() + blockSize);
        }
        else if(up){
            playerDest.get(0).setY(player.get(0).getY() - blockSize);
        }
        else if(down){
            playerDest.get(0).setY(player.get(0).getY() + blockSize);
        }
    }
    else{
        for(int i = 0; i < getSize(); i++){
            if(up || down){
                if(player.get(i).getX() != playerDest.get(i).getX()){
                    player.get(i).setX(player.get(i).getX() + MoveDirection(playerDest.get(i).getX(), player.get(i).getX(), moveSpeed));
                }
                else if(player.get(i).getY() != playerDest.get(i).getY()){
                    player.get(i).setY(player.get(i).getY() + MoveDirection(playerDest.get(i).getY(), player.get(i).getY(), moveSpeed));
                }
            }
            else if(right || left){
                if(player.get(i).getY() != playerDest.get(i).getY()){
                    player.get(i).setY(player.get(i).getY() + MoveDirection(playerDest.get(i).getY(), player.get(i).getY(), moveSpeed));
                }
                else if(player.get(i).getX() != playerDest.get(i).getX()){
                    player.get(i).setX(player.get(i).getX() + MoveDirection(playerDest.get(i).getX(), player.get(i).getX(), moveSpeed));
                }
            }

    private float MoveDirection(float to, float from, float moveSpeed){
        if(to - from > 0){
            return 1;
        }
        else if(to - from < 0){
            return -1;
        }
        else{
            return 0;
        }
    }

现在,对它的微小更改在MoveDirection()方法中,并且重新调整了距离。 这只是增加了运动速度的变量。

        if(left){
            playerDest.get(0).setX(player.get(0).getX() - moveSpeed);
        }
        else if(right){
            playerDest.get(0).setX(player.get(0).getX() + moveSpeed);
        }
        else if(up){
            playerDest.get(0).setY(player.get(0).getY() - moveSpeed);
        }
        else if(down){
            playerDest.get(0).setY(player.get(0).getY() + moveSpeed);
        }

private float MoveDirection(float to, float from, float moveSpeed){
    return Integer.signum((int)to - (int) from) * moveSpeed;
}

为什么我要对播放器的移动方式进行微小的更改? 根据游戏刷新的速度,我需要将其用作值。 因此,变量deltafloat moveSpeed;

我只是不明白为什么这个小小的变化会使我的足迹变得簇拥而没有遵循它的方向……我已经尝试了好几个小时了。 任何帮助是极大的赞赏!

谢谢!

将int( (int)to - (int) from )是您的重大更改。 这轮tofrom下到整体的数字,然后计算它们的区别,然后才调用正负号。 这与之前的代码非常不同,在先前的代码中,您将差值计算为浮点数,然后检查> 0< 0 ,而没有任何强制转换为整数。

例:

to = 0.9
from = 0.2

这将导致

Integer.signum(0 - 0) * moveSpeed

,其总值为0。

尝试java.lang.Math.signum(to - from) * moveSpeed 这适用于浮点数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM