0

这让我快疯了!为什么这不起作用???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);
}
4

2 回答 2

0

由于浮点舍入误差,它可能会产生误导。使用浮点数时,您可以通过保留两个乘数并使用它们的倍数来表示数字来近似表示数字。这有一个不幸的限制,即不能表示所有整数,因为很明显,一些整数是素数,或者不能以足够精度表示为倍数。

按照惯例,具有非常小的小数部分的数字在打印之前会被四舍五入 - 这就是为什么您会看到漂亮的输出,但这些值的表现却不如预期。

即使您对整数进行操作,Flash 也会在内部将它们转换为浮点数、计算并将结果转换为预期类型,因此您在 Flash 中没有正确的整数数学运算。

在你的情况下你可以做什么:因为starSpawnTime最初是一个整数,如果你这样做看起来不会造成任何伤害:

if (!int(startSpawnTime % 10)) { . . . }

或者

if (int(startSpawnTime % 10) == 0) { . . . }

如果您非常关心性能,您可以自己实现整数除法,或者使用归纳法来计算提醒 - 但我会将其作为练习留给读者 :)

顺便说一句:整数在 Flash 中不能为空,一旦声明,它们就会被赋予默认值,整数的默认值为0. 所以写var i:int = 0;是多余的,var i:int就够了。

于 2012-03-20T19:50:51.007 回答
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")
    }
}

可能不是模运算符导致问题

于 2012-03-21T17:01:52.967 回答