0

我正在尝试将我的游戏中的圈数计数器增加一,但因为我必须将此代码放入游戏循环中,所以我的计数器每次都会增加约 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

4 回答 4

1

添加另外两个名为 的变量inCheckpoint,它存储用户当前是否在检查点“内部”。这允许您检测用户何时进入检查点并仅增加lapNumberthen。代码如下所示:

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

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

您需要为每一圈重新设置此保护值——例如,在您增加之后lapNumber

于 2012-04-11T17:03:43.617 回答
0

您可能需要取消“checkpointPassed”状态。

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

这意味着在下一次通过检查点之前,您不会再次计算圈数,这大概是您需要计算圈数的时候。

但是,如果您checkpointPassed在循环的后面需要 true ,那么您需要考虑是否需要另一个变量,例如lapCounted,它被设置为falsewhencheckpointPassed被设置为true,并由上面的代码重置为true(而不是设置checkpointPassed,而不是以及设置它)。

于 2012-04-11T17:06:02.200 回答
0

如果我正确理解您所说的话,您的“if”语句在主循环内,当您通过检查点时,“checkpointPassed”变为真。多长时间?

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

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

于 2012-04-11T17:07:35.510 回答