0

ゲームのラップ カウンターを 1 ずつインクリメントしようとしていますが、このコードをゲーム ループに配置する必要があるため、カウンターは毎回約 500 ずつ、または 1 つ上に移動します。これが私のコードです。このcheckpointPassed変数は、チェックポイントが通過した場合にのみ true になります。これが機能することはわかっており、チェックポイント番号は現在のチェックポイントであり、0 から始まります。

if(checkpointNumber == 0 && checkpointPassed == true)
{
    lapNumber += 1;
}

ゲームループはかなり大きいので投稿できません。

どんな助けでも大歓迎です。

編集

私がやろうとしていることを見ることができるように、ここにいくつかのコードがあります。

if(distance > carRadius && markerCounter < 5000)
{
    if(checkpointPassed == true)
    {
        markerCounter++;
    }
}
if(checkpointNumber == 0 && checkpointPassed == true)
{
    lapNumber += 1;
}
if(distance < carRadius)
{
    markerCounter++;
    cross->SetX(checkpointX);
    cross->SetY(checkpointY);
    cross->SetZ(checkpointZ);
    checkpointNumber += 1;
    checkpointPassed = true;
}
if(markerCounter > 4999)
{
    checkpointPassed = false;
    cross->SetPosition(0,-50,0);
    markerCounter = 0;
}
4

4 に答える 4

1

という別の 2 つの変数を追加しますinCheckpoint。これは、ユーザーが現在チェックポイントの「内部」にいるかどうかを格納します。これにより、ユーザーがチェックポイントに入ったタイミングを検出し、lapNumberその後のみインクリメントすることができます。コードは次のようになります。

if(checkpointNumber == 0 && checkpointPassed == true)
{
    if (inCheckpoint == false) /* previously not inside a checkpoint */
        lapNumber += 1;
    inCheckpoint = true;
}
else
{
    inCheckpoint = false;
}

更新:依存しないでくださいcheckpointPassed

if(distance < carRadius)
{
    if (inCheckpoint == false) /* previously not inside a checkpoint */
        lapNumber += 1;
    inCheckpoint = true;
}
else
{
    inCheckpoint = false;
}
于 2012-04-11T17:07:17.783 に答える
0

あなたの言ったことを正しく理解していれば、あなたの 'if' ステートメントはメイン ループ内にあり、チェックポイントを通過すると 'checkpointPassed' が true になります。どれだけの時間?

数回の反復で「true」のままである場合、ゲーム ループが反復を実行するたびに、ラップ カウンターがインクリメントされます。この場合、繰り返しの最後に checkPointPassed を false に設定するか、別の変数を使用して、インクリメント後に checkPointPassed が true および false になると同時に true に設定する必要があります。

これで質問に答えられない場合は、コードのこの部分だけでは何をしたいのかわかりにくいので、もう少しコンテキストを教えてください。

于 2012-04-11T17:07:35.510 に答える