我有一个Matrix
我将其回收并用于将DisplayObject
个实例绘制到Bitmap
上。
目前,我在渲染每个项目之前重置Matrix
,如下所示:
_matrix.a = 1;
_matrix.b = 0;
_matrix.c = 0;
_matrix.d = 1;
_matrix.tx = 0;
_matrix.ty = 0;
做上述内容会更好吗,还是只是这样做?:
_matrix = new Matrix();
一般来说,我会说前者,但是我不确定在Matrix
的情况下是否有一些重要的事情发生在我重置(数学上)的每一个属性。
答案 0 :(得分:7)
我认为重复使用Matrix
的相同实例比每次创建新实例更有效。
实际上,创建一个新实例是一个相对繁重的操作,这就是使用缓存的原因:创建一些实例并重用它们而不是创建大量实例。
我运行了一点基准,它确认了我的答案:
var t:Number;
var i:int;
var N:int = 10000000;
t = getTimer();
for (i = 0; i < N; i++) {
_matrix = new Matrix();
}
trace(getTimer()-t); // 7600
t = getTimer();
for (i = 0; i < N; i++) {
_matrix.a = 1;
_matrix.b = 0;
_matrix.c = 0;
_matrix.d = 1;
_matrix.tx = 0;
_matrix.ty = 0;
}
trace(getTimer()-t); // 4162
最后,请注意差异不是很大,并且创建10000000
个新实例仅需7600 ms
,所以除非您每帧创建数千个矩阵,否则任何一种方法都不会对绩效的显着影响。
修改强>
使用方法identity
将具有两种方法(简单性和性能)的优点:
t = getTimer();
for (i = 0; i < N; i++) {
_matrix.identity();
}
trace(getTimer()-t); // 4140