0

私の質問は非常に単純ですが、そのように機能させることは別の話です。では、掘り下げていきます!

目的: ヘビのようなゲームを作ろうとしていますが、パスに続くトレイルに問題があります。DIDが機能する以前の方法を使用しましたが、「目的地」オブジェクトを排除して、ヘビがグリッド感ではなく自由に移動できるようにしています。

私の問題は、プレーヤー クラスの書き直しを開始したときに、多くの冗長なものを削除したことです。私の最後の仕事は、トレイルの動きを修正することです。トレイルが所定の位置にスライドしてトレイルをたどってほしいと思っています。

私が以前に書いたコード (Grid-feel):

public void Move(int delta){
 //        double moveSpeed = (delta * .6f) - (oreWeight * ore + armorWeight * armor);

        //Smooth animation for snake movement
        if(IsMoving() && (X.equals(destX) && Y.equals(destY)) ){
            for(int i = 1; i < getSize(); i++){
                if(destX.get(i).intValue() != X.get(i-1).intValue()){
                    destX.set(i, X.get(i-1));
                }
                else if(destY.get(i).intValue() != Y.get(i-1).intValue()){
                    destY.set(i, Y.get(i-1));
                }
            }

            if(left){
                destX.set(0, destX.get(0) - GameBoardNew.blockSize);
            }
            else if(right){
                destX.set(0, destX.get(0) + GameBoardNew.blockSize);
            }
            else if(up){
                destY.set(0, destY.get(0) - GameBoardNew.blockSize);
            }
            else if(down){
                destY.set(0, destY.get(0) + GameBoardNew.blockSize);
            }
        }
        else{
            for(int i = 0; i < getSize(); i++){
                if(up || down){
                    if(X.get(i).intValue() != destX.get(i).intValue()){
                        X.set(i, X.get(i) + Integer.signum(destX.get(i) - X.get(i)));
                    }
                    else if(Y.get(i).intValue() != destY.get(i).intValue()){
                        Y.set(i, Y.get(i) + Integer.signum(destY.get(i) - Y.get(i)));
                    }
                }
                if(right || left){
                    if(Y.get(i).intValue() != destY.get(i).intValue()){
                        Y.set(i, Y.get(i) + Integer.signum(destY.get(i) - Y.get(i)));
                    }
                    else if(X.get(i).intValue() != destX.get(i).intValue()){
                        X.set(i, X.get(i) + Integer.signum(destX.get(i) - X.get(i)));
                    }
                }
            }
        }
}

そして今、私はそれを作り直したので、式の目的地の部分を取り除こうとするとともに、プレイヤーが移動する速さの速度を他の条件とともに追加しています。アウト。しかし、私が持っているものは、プレーヤーがさまざまな方向に速く動き回るまで機能します...その後、体はただ一緒に固まります。基本的には同じ式ですが、それでも非常に困惑しています。

public void Move(int delta){
 //        float moveSpeed = (playerSpeed - (oreWeight * getSize() + armorWeight * armor)) * delta;
    float moveSpeed = 1f;

    if(IsMoving() && player.get(0).getX() == playerDest.get(0).getX()){
        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{
                playerDest.get(i).setY(player.get(i - 1).getY());
            }
        }

        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);
        }
    }

    for(int i = 0; i < getSize(); i++){
        Rectangle location = player.get(i);
        Rectangle inFront = playerDest.get(i);
        int xVel = Integer.signum((int)inFront.getX() - (int)location.getX());
        int yVel = Integer.signum((int)inFront.getY() - (int)location.getY());
        if(up || down){
            if(location.getX() != inFront.getX()){
                if(xVel == 1){
                    location.setX(location.getX() + moveSpeed);
                }
                else if(xVel == -1){
                    location.setX(location.getX() - moveSpeed);
                }
            }
            else if(location.getY() != inFront.getY()){
                if(yVel == 1){
                    location.setY(location.getY() + moveSpeed);
                }
                else if(yVel == -1){
                    location.setY(location.getY() - moveSpeed);
                }
            }
        }
        else if(right || left){
            if(location.getY() != inFront.getY()){
                if(yVel == 1){
                    location.setY(location.getY() + moveSpeed);
                }
                else if(yVel == -1){
                    location.setY(location.getY() - moveSpeed);
                }
            }
            else if(location.getX() != inFront.getX()){
                if(xVel == 1){
                    location.setX(location.getX() + moveSpeed);
                }
                else if(xVel == -1){
                    location.setX(location.getX() - moveSpeed);
                }
            }
        }
    }
}

情報を明確にする必要がある場合は、喜んでお答えします。聞いてください!

これを読んでくれてありがとう!

4

2 に答える 2

0

これがセグメント化された体を持つヘビの場合、各セグメントはその前のセグメントに従います。「自由意志」を持つ唯一のセグメントは、ユーザー入力に従うヘッドです。

于 2013-04-30T14:14:21.950 に答える