簡體   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