这让我绝对疯狂!为什么这不起作用? if语句永远不会跳闸,即使跟踪清楚地显示该死的数字%10等于零......
var starSpawnTime:int = 0;
stage.addEventListener(Event.ENTER_FRAME, update);
stop();
function update(e:Event): void {
starSpawnTime++;
trace(starSpawnTime);
trace("Modulus: " + starSpawnTime % 10);
if ((starSpawnTime % 10) == 0) {
sStarBuffer = new SStar();
sStarBuffer.x = 560;
sStarBuffer.y = getRandomNumber(0, 400);
stage.addChild(sStarBuffer);
stars.push(sStarBuffer);
}
答案 0 :(得分:0)
由于浮点舍入错误,可能会产生误导。使用浮点数时,您通过保留两个乘数并使用它们的倍数来表示数字来近似表示数字。这有一个不幸的限制,就是无法表示所有整数,因为很明显,有些整数是素数,或者不能用足够的精度表示为倍数。
按照惯例,具有非常小的小数部分的数字在打印之前会被舍入 - 这就是为什么您看到相当漂亮的输出,但这些值的行为并不像预期的那样。
即使您对整数进行操作,Flash也会在内部将它们转换为浮点数,计算并将结果转换为期望的类型,因此您在Flash中没有正确的整数数学。
你可以在你的情况下做什么:因为starSpawnTime
最初是一个整数,如果你这样做,它看起来不会造成任何伤害:
if (!int(startSpawnTime % 10)) { . . . }
或
if (int(startSpawnTime % 10) == 0) { . . . }
如果你非常关心性能,你可以自己实现整数除法,或者可以使用归纳来计算提醒 - 但我会将此作为练习留给读者:)
顺便说一句:整数在Flash中不可为空,一旦声明,就会为它们分配默认值,整数的默认值为0
。因此,写var i:int = 0;
是多余的,var i:int
就足够了。
答案 1 :(得分:0)
我已尝试过代码(简化)并且可以正常工作
var starSpawnTime:int = 0;
stage.addEventListener(Event.ENTER_FRAME, update);
stop();
function update(e:Event): void {
starSpawnTime++;
trace(starSpawnTime);
trace("Modulus: " + starSpawnTime % 10);
if ((starSpawnTime % 10) == 0) {
trace("BAM")
}
}
可能不是造成问题的模运算符