skip to main |skip to sidebar
显示标签为“Bug”的博文。显示所有博文
显示标签为“Bug”的博文。显示所有博文

2008-04-27

[AS3]ActionScript 中数组的访问的 BUG

重要度:(3/5) 这个问题看似简单,但 debug 时却难以发现。

数组访问时如果下标使用了函数并且使用了 +=-=*= 等运算符时需要特别地注意,函数会被调用两次!

比如以下代码:

var i:int = 0;
var foo = function():int {
trace("foo");
return ++i;
}
var arr:Array = [1,2,3];
arr[foo()] += 10;
trace(arr);

将会输出:

foo;
foo;
1,13,3

而正确的输出为:

foo;
1,12,3

这是因为在编译时编译器只做了一下简单的操作:

(a += b) --> (a) = (a) + (b)

以至于将 arr[foo()] += 10; 编译成 arr[foo()] = arr[foo()] + 10;

2008-04-06

[AS3]mxmlc 编译器的 BUG

PS:因为最近很忙,好久没有更新 Blog 了。

最近发现了一个 mxmlc 编译器的 BUG,当含有 -(true ? 1 : 0) 的代码编译会出错。

比如以下代码:

package {
import flash.display.Sprite;
public class TestBUG extends Sprite {

public function TestBUG() {
trace('Test');
var foo:Number = -(true ? 1 : 0);
}
}
}

使用 mxmlc 编译时会弹出错误:

Error: null
java.lang.NullPointerException
  at macromedia.asc.semantics.ConstantEvaluator.evaluate(ConstantEvaluator.java:1168)
  at macromedia.asc.parser.UnaryExpressionNode.evaluate(UnaryExpressionNode.java:33)
  at macromedia.asc.semantics.ConstantEvaluator.evaluate(ConstantEvaluator.java:1805)
......

但把 -(true ? 1 : 0)- 号去掉后编译却可以正常进行,真奇怪!

影响的版本:

  • 2.0
  • 2.0.1
  • 3.0.0

2008-01-07

[AS3]pixelDissolve 有 Bug?

最近发现使用 BitmapData.pixelDissolve 溶解像素时,无论 randomSeednumOfPixels 参数是多少,sourceRect 指定的矩形的左上角一定会被溶解!

比如设定为溶解 10 个像素时,左上角 + 剩下的像素中取 10 个会变化。设为溶解 0 个时,只有左上角会变化。

例子: 可以看到左上角很不自然。

例子的代码:

package {
import flash.display.*;
import flash.events.Event;
import flash.geom.*;

[SWF(width="32",height="32")]
public class Test2 extends Sprite{
public function Test2():void {
var bitmap:BitmapData = new BitmapData(32, 32, false,0);
var seed:int = 0;
addChild(new Bitmap(bitmap));
addEventListener(Event.ENTER_FRAME,
function (event:Event):void {
seed = bitmap.pixelDissolve(bitmap, bitmap.rect, new Point(0,0),
seed, 5, Math.random()*0x1000000);
}
);
}
}
}

我用的 Flash Player 的版本是 9.0.115.0。