0

アウト オブ バウンズの位置を考慮すると、6 と -6 です。

船を向きを変えて反対方向に動かしたいです。

これは私が持っているコードです.それはまだ私が望むように100%動作していません. どうすれば改善するかについて誰かがアイデアを持っているかどうか知りたいです。これが私のコードのロジックです。

//If the ship hits a boundary it turns around and moves in the opp.
//direction. To do this, the ship's velocty should be flipped from a 
//negative into a positive number, or from pos to neg if boundary
//is hit.

//if ship position is -5 at velocity -1 new ship pos is -6
//if ship position is -6 at velocity -1 new ship velocity is +1
//                                      new ship position is +5

これが私のコードです:

public void move() 
{
    position = velocity + position;

    if (position > 5)
    {
        velocity = -velocity;
    }
    else if (position < -5)
    {
        velocity = +velocity;
    }
}
4

5 に答える 5

1

あなたはこれを行うことができます:

public void move() 
    {
    //first check where the next move will be:
    if ((position + velocity) > 5 || (position + velocity) < -5){

        // Here we change direction (the velocity is multiplied for -1)
        velocity *= -1;

    }

    position += velocity;
}
于 2013-09-18T11:51:41.730 に答える
1

コードvelocity = +velocity;は、負の速度を正の速度に変更しません。これが行うことは+1、符号を変えない速度を掛けることと同じです。

範囲外に出るときに速度の符号を反転するには、常に乗算する必要があります-1

境界が何であるかはあまり明確ではないので、6 と -6 であると仮定します。

position += velocity;
//make sure the ship cannot go further than the bounds
//but also make sure that the ship doesn't stand still with large velocities
if (position > 6)
{
    velocity = -velocity;
    position = 6;
}
if (position < -6)
{
    velocity = -velocity;
    position = -6;
}
于 2013-09-18T11:52:02.623 に答える
0

方向を変えたい場合は、標識を裏返す必要があります。これは、a* -1またはそれを否定することと同じです。

public void move() {    
    // prevent it jumping through the wall.
    if (Math.abs(position + velocity) > 5)
        velocity = -velocity;

    position += velocity;
}
于 2013-09-18T11:52:20.590 に答える
0

まず、ロジックに少し欠陥があるように見えます。位置が-6で速度が-1の場合、反対方向に動き始めるには、新しい位置を-5 ( +5ではなく) にして速度を+1にする必要があります。

また、位置が境界条件に達するたびに、速度の符号を反転する必要があります。

public void move() {
    if (Math.abs(position + velocity) > 5) { // Check for boundary conditions
        velocity *= -1;
    }
    position = position + velocity; // position += velocity;
}
于 2013-09-18T11:48:53.080 に答える
0

境界にぶつかると、速度に -1 を掛けます。

于 2013-09-18T11:47:44.290 に答える