嘿家伙,
我一直在ActionScript 3中编写一个光线投射引擎,我一直在得到一些糟糕的表现。
起初我认为这是显而易见的:光线投射是数学密集型的,因为涉及复杂的数学运算,我必须得到较低的帧速率,但是令我惊讶的是,事实证明情况并非如此;看起来,绘制墙壁的for-loop是原因。
我试着用我的代码进行试验,发现当我注释掉for循环时,FPS更加加倍,但是当我取消注释for循环但留下图形代码评论FPS减半时。
ActionScript是否真的很慢,简单的循环本身应该消耗太多的CPU时间?如何加快ActionScript中的循环?
感谢您的任何意见!
这里是有问题的代码(Quck注:COLUMN_SIZE只是定义为1的常数):
var y:int = 0;
var x:int = 0;
var rx:int = 0;
for(x = 0; x < COLUMN_SIZE; x++) {
yt = ys;
rx = x + sx;
for(y = yTop; y < yBot; y++) {
var idx:int = int((stage.stageWidth*y)+rx);
pBuffer[idx] = getTexturePixel(ray.tile-1, ray.texel, int(yt), ray.horz);
yt += yi;
}
}
什么是其余的类型(yt,rx,yTop,yBot等)? – mpdonadio 2011-03-08 20:06:57
@MPD这更多的是关于循环本身。速度大大减慢,甚至如果我注释掉与getTexturePixel行了,但这里的功能是:'函数getTexturePixel(索引:INT,X:INT,Y:INT,阴影:布尔= FALSE):UINT { \t \t var clr:uint; \t \t 如果(指数> = 0 &&指数
JamesK89
2011-03-08 20:24:48
这并没有真正回答我的问题。循环/代码中其他变量的类型是什么?混合整数和数字可能会导致性能问题。 – mpdonadio 2011-03-08 20:30:11