看到有同学比较as3像素copy的效率的文章,得出的结论是:
copyPixels>setPixels>setVector
让我感到非常不理解的是新api setvector为何远远落后于其他两个呢,从原则上,setvector应该比setpixels快,今天碰巧做了测试,发现和上面的测试结果不太一样
1 |
var start: int = getTimer(); |
2 |
for (var j: int = 0; j < 9999; j++) { |
3 |
var arr:Vector.< uint > = bmd2.getVector( new Rectangle(10, 20, 80, 80)); |
4 |
bmd1.setVector( new Rectangle(10, 10, 80, 80), arr); |
6 |
trace( "setVector" , getTimer() - start); |
1 |
var start: int = getTimer(); |
2 |
for ( var i: int = 0 ; i < 9999 ; i++) { |
3 |
var arr:ByteArray = bmd2.getPixels( new Rectangle( 10 , 20 , 80 , 80 )); |
5 |
bmd1.setPixels( new Rectangle( 10 , 10 , 80 , 80 ), arr); |
7 |
trace ( "setPixels" , getTimer() - start); |
1 |
var start: int = getTimer(); |
2 |
for ( var j: int = 0 ; j < 9999 ; j++) { |
3 |
bmd1.copyPixels(bmd2, new Rectangle( 10 , 20 , 80 , 80 ), new Point( 10 , 10 )); |
5 |
trace ( "copyPixels" , getTimer() - start); |
1 |
var start: int = getTimer(); |
2 |
for ( var j: int = 0 ; j < 9999 ; j++) { |
3 |
bmd1.draw(bmd2, new Matrix( 0.8 , 0 , 0 , 0.8 ), null , null , new Rectangle( 10 , 10 , 80 , 80 )); |
5 |
trace ( "draw" , getTimer() - start); |
经过测试,执行1W次copy,setVector是800毫秒,setPixels是3973毫秒,draw870毫秒,当然最快的还是copyPixels:130毫秒
setPixels读取的速度比较慢,写的速度大家基本相同。
copyPixels>setVector>draw>setPixels
这样的结果才合理,看来文章不能简单看看,动手才更有意义。