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