How to increment score after certain time period? XNA
在5秒后增加玩家的分数有点困难。最后,我希望能够使用相同的逻辑,在所有不同的时间段后,将分数增加"x"个数。目前,分数正以每秒10到60次的速度递增(由于更新方法每秒被调用60次)。这意味着分数最终是560而不是10。
我在考虑使用像isPreviousScoreChanged和isCurrentScoreChanged这样的变量,比如检测按钮是否被按下和释放时,但是这也不能很好地工作。
我使用Stopwatch类来跟踪游戏开始后经过的秒数。
代码差不多是:
1 2 3 4
| if (Stopwatch.ElapsedTicks == 5)
{
playerScore += 10;
} |
[我知道在这里粘贴代码是可能的,但是没有太多要粘贴的内容,而且到目前为止我所做的非常简单]
感谢大家阅读本书——)
- stackoverflow.com/questions/8552648/…这可能会有所帮助
- 你能确定你每秒要增加多少分数吗,只需使用秒表.elapsedmilliseconds(当然是在转换成秒后)
- 蒂姆:我把秒表转换成了以前的秒数,还说我想增加10,但这不起作用,因为分数必须以每秒60倍的速度增加10。
这样做:
1 2 3 4 5 6 7 8 9
| if (timer > TimeSpan.Zero)
{
timer -= gameTime.ElapsedGameTime;
if (timer <= TimeSpan.Zero)
{
playerScore += 10;
timer = TimeSpan.Zero;
}
} |
当然,你必须设置timer = new TimeSpan(0, 0, 5);。
- 谢谢平克曼,这似乎有效,即使我一直在用秒表课…也许我可以稍微调整一下,但是这看起来确实有效,而且它是相对直接的。谢谢:D
- 这就是我每次需要处理一个时间间隔时所做的,所以我确信它确实有效:d
首先,我建议不要使用勾号,因为一个勾号的时间很短。秒-如果每x秒更新一次,则使用模数运算符(如果效率更高)。
if((Stopwatch.ElapsedMilliseconds%2000)==0){playerScore+=10}
在这个例子中,分数应该每2秒更新一次。
- 谢谢你的回复。出于某种原因,这似乎不起作用。我已经对前面的代码进行了注释,我只是使用了您上面推荐的代码。实际上,我只是重新运行了我的游戏,它随机运行了一次,但是我在它运行之前和之后运行了它,但当时它不工作。我希望这是有道理的。再次感谢您的回复,我很感激:)
- 它只有在被另一个函数调用时才起作用。制作一个单独的线程是一个好主意,只有这样,您才应该使用while(true)循环,该循环会增加分数并休眠x毫秒,直到它再次被触发。语法应该相当简单,请参见System.Threading。
- 酷,好吧,我去试试。多谢,伊妮丝:—)