我想在while循环c ++中将计数器递增1

时间:2012-04-11 17:00:36

标签: c++ loops counter

我试图在我的游戏中增加一个计数器,但是因为我必须将这个代码放在游戏循环中,我的计数器每次都会超过500或者向上移动一个。这是我的代码。 checkpointPassed变量仅在检查点通过时才为真。我知道这是有效的,检查点号是当前的检查点,它们从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 个答案:

答案 0 :(得分:1)

添加另一个名为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;
}

答案 1 :(得分:0)

您可以设置/传递一个gueard值,该值表示您在游戏循环中有多少次迭代(或者这是否是第一次迭代)。如果是第一次迭代(在当前圈内),请像现在一样递增变量,否则不要

您需要为每一圈重置此防护值 - 例如在您递增lapNumber之后。

答案 2 :(得分:0)

您可能需要取消'checkpointPassed`状态。

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

这意味着在下次检查站通过之前,您不会再计算一圈,这可能是您需要计算的时间。

但是,如果您在循环中稍后需要checkpointPassed为真,那么您需要考虑是否还需要另一个变量,例如lapCounted,该变量设置为falsecheckpointPassed设置为true时,并通过上面的代码重置为true(而不是设置checkpointPassed,而不是设置它。)

答案 3 :(得分:0)

如果我理解你所说的话,你的'if'语句在主循环内,当你通过检查点时,'checkpointPassed'变为真。多久了?

如果它在几次迭代中保持“真”,那么每次你的游戏循环进行迭代时,你的计数器会递增。在这种情况下,您应该在迭代结束时将checkPointPassed设置为false,或者使用另一个变量,在checkPointPassed变为true的同时设置为true,在递增后设置为false。

如果这不能解答您的问题,您是否可以提供更多的上下文,因为只有这部分代码,很难弄清楚您想要做什么。