0

キャラクターが窓の端にぶつかると停止するのに問題があります。これが私の更新方法です。

public void update(GameContainer gc, StateBasedGame sbg, int delta)
    {
        Input input = gc.getInput();
        playerX += VelocityX;

        gc.setShowFPS(Splash.showFps);

        if(input.isKeyPressed(Input.KEY_F1))
        {
            Splash.showFps = !Splash.showFps;
        }

        if (input.isKeyDown(Input.KEY_RIGHT))
            VelocityX = 10;
        else if (input.isKeyDown(Input.KEY_LEFT))
            VelocityX = -10;
        else if (playerX >= 700)
            VelocityX = 0;
        else
        {
            VelocityX = 0;
        }

    }

まだコーディングしていないため、左への移動が発生していることに気付きましたが、キャラクターは画面の右から外れます

4

3 に答える 3

1
 if (input.isKeyDown(Input.KEY_RIGHT)){
        VelocityX = 10;}
    else if (input.isKeyDown(Input.KEY_LEFT)){
        VelocityX = -10;}
    else{VelocityX = 0;}
    if (playerX >699){
        playerX=699;
        VelocityX = 0;}
    else if(playerX<1){
         playerX=1;VelocityX = 0;
         }
于 2013-05-29T03:36:46.897 に答える
0

問題が修正されました。キー検出内でベロシティを 0 に設定します。

だから代わりに

if (input.isKeyDown(Input.KEY_RIGHT))
            VelocityX = 10;
        else if (playerX >= 700)
            VelocityX = 0;

次のようなことをします

if (input.isKeyDown(Input.KEY_RIGHT))
        {
            VelocityX = 10;
            if (playerX >= 700)
                VelocityX = 0;
        }
于 2013-05-29T03:52:21.133 に答える
0

私が気づいたいくつかの間違いがあります。1 つ目は、更新の問題です。プレーヤーを速度で移動させたいと考えています。また、境界チェックを行う必要があります。あなたが抱えているもう 1 つの問題は、他の人が指摘していないことですが、右キーの設定があることです。つまり、右キーと左キーを押している場合、プレーヤーは右に移動します。これは if / else if ステートメントによるものです。より詳細なレベルの制御のために、if を分離する必要があります。

public void update(GameContainer gc, StateBasedGame sbg, int delta)
{
    Input input = gc.getInput();
    //playerX += VelocityX; -> this is moved

    gc.setShowFPS(Splash.showFps);

    if(input.isKeyPressed(Input.KEY_F1))
    {
        Splash.showFps = !Splash.showFps;
    }

    VelocityX = 0;
    if (input.isKeyDown(Input.KEY_RIGHT))
        VelocityX += 10;
    //removed the else
    if (input.isKeyDown(Input.KEY_LEFT))
        VelocityX -= 10;

    //you want to bounds check regardless of the above statments
    //get rid of the else
    if ((playerX >= 700 && VelocityX > 0) || (playerX <= 0 && VelocityX < 0)) //check both sides
        VelocityX = 0;

    //move the player
    playerX += VelocityX;
}

EDIT:境界にいるときに移動できないという問題を修正するために私のコードを修正しました。

于 2013-06-03T13:46:21.523 に答える