XNA - gameTime modulo返回0

时间:2014-01-27 17:26:02

标签: c# xna modulo

i = (gameTime.TotalGameTime.Milliseconds / n) % 11

这里的模数返回以下数字:{1,2,3,4,5,6,7,8,9,10,0,1,0}但是那些最后的零和一个正在困扰我,因为它应该不应该这样,应该吗?我想要的结果是返回{1,2,3,4,5,6,7,8,9,10,11,0},但事实并非如此。有没有人解释它?我完全不知道是什么导致它,我已经尝试过不同版本的代码,也将11更改为其他内容,但它也没有用。

3 个答案:

答案 0 :(得分:1)

不,因为11 % 11为零。请参阅文档:http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

答案 1 :(得分:0)

不,% operator在将左操作数除以右操作数时返回余数。换句话说,x % x总是返回0,因为x可以被x完全整除。或者更一般地说,对于整数,nmx(n * x + m) % x == m

如果您想要的值范围为0到11,请使用模12:

i = (gameTime.TotalGameTime.Milliseconds / n) % 12

答案 2 :(得分:0)

你的模数值应该是12而不是11.模数返回除法的余数(更确切地说,m % n的等式是m - floor(m/n)n),所以11/11确实会返回0。

然而,12,11 / 12将是11,12/12是0和13/12剩余1。它'包裹'你的value - 1

所以你应该使用它:

i = (gameTime.TotalGameTime.Milliseconds / n) % 12

12的例子:

var b = 10 % 12; //10
var c = 11 % 12; //11
var d = 12 % 12; //0
var e = 13 % 12; //1