我用Flex 4.6.0开发了一款动作游戏,我遇到了绘图部分的问题。实际上,在几天之内,我认为问题是物理部分的计算,但经过大量优化后,我确信我有绘图问题。
让我解释代码的样子。
在游戏循环中我有:
protected function onEnterFrame():void {
runPhysics();
drawScene();
}
在runPhysics
函数中我做了很多计算,但正如我所说,我确信它已经过优化。
内部drawScene
我有:
protected function drawScene():void {
drawFixedBackground( fixedBitmap );
drawPeriodicBackground( periodicBitmap1 );
drawPeriodicBackground( periodicBitmap2 );
drawLevel();
drawCar();
gamePanel.graphics.clear();
gamePanel.graphics.beginBitmapFill(screenBuffer, null, false, true);
gamePanel.graphics.drawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
gamePanel.graphics.endFill();
}
drawFixedBackground
功能非常简单。我只是使用copyPixels
功能在整个屏幕上绘图。
其他功能取决于我的汽车和相机的位置,因此我必须在绘图前进行缩放和翻译。
我有一个名为BitmapData
的全局screenBuffer
,我在其中绘制了我已经在内存中的其他BitmapData。例如:
protected function drawPeriodicBackground( bitmap:BitmapData ):void {
var m:Matrix = new Matrix();
m.scale( ... );
m.translate( ... );
screenBuffer.draw( bitmap, m);
}
protected function drawLevel():void {
var m:Matrix = new Matrix();
for(var i:int=0; i<NUMBER_OF_BOARDS; i++) {
m.scale( ... );
m.translate( ... );
screenBuffer.draw(boardBitmap, m);
}
}
protected function drawCar():void {
var m:Matrix = new Matrix();
m.scale( ... );
m.translate( ... );
screenBuffer.draw(carBitmap, m);
}
在此代码中,gamePanel
是一个spark Group
组件。
我说我确定物理不是问题,因为如果我注释掉所有绘图功能而不是drawCar,我的车运行良好,与隐形板碰撞并保持CPU使用率很低(25%)。另一方面,所有绘图功能都处于活动状态,我的CPU使用率达到140%,而且我的车在某些计算机上开始滞后。
任何人都可以帮助我吗?我做错了吗?
提前致谢。