我试图在我的游戏中增加一个计数器,但是因为我必须将这个代码放在游戏循环中,我的计数器每次都会超过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;
}
答案 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
,该变量设置为false
当checkpointPassed
设置为true
时,并通过上面的代码重置为true
(而不是设置checkpointPassed
,而不是设置它。)
答案 3 :(得分:0)
如果我理解你所说的话,你的'if'语句在主循环内,当你通过检查点时,'checkpointPassed'变为真。多久了?
如果它在几次迭代中保持“真”,那么每次你的游戏循环进行迭代时,你的计数器会递增。在这种情况下,您应该在迭代结束时将checkPointPassed设置为false,或者使用另一个变量,在checkPointPassed变为true的同时设置为true,在递增后设置为false。
如果这不能解答您的问题,您是否可以提供更多的上下文,因为只有这部分代码,很难弄清楚您想要做什么。