Actionscript 3 闪光模数故障?

Actionscript 3 闪光模数故障?,actionscript-3,flash,actionscript,modulus,Actionscript 3,Flash,Actionscript,Modulus,这简直快把我逼疯了!为什么这不管用???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语句永远不会跳闸,即使跟踪清楚地显示该死的数字%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);
}

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

按照惯例,小数部分非常小的数字在打印前会进行四舍五入-这就是为什么您会看到漂亮的输出,但值的行为与预期不符

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

在您的情况下可以做什么:因为
starspawhtime
最初是一个整数,所以如果您这样做,它看起来不会有任何伤害:

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

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

顺便说一句:整数在Flash中不可为空,一旦声明,它们将被分配默认值,整数的默认值是
0
。所以写
vari:int=0是冗余的,
var i:int
就足够了。

我已经尝试过代码(简化),它可以工作了

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")
    }
}

问题可能不是由模运算符引起的

从stage.addChild中删除stage您可以使用
(starSpawnTime%10)。toString()==“0”
“if”
中。您如何知道if语句不是“tripping”?
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")
    }
}