我使用 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
是一个火花Group
组件。
我说我确信物理不是问题,因为如果我注释掉除 drawCar 之外的所有绘图函数,我的车运行良好,与不可见的板相撞并保持 CPU 使用率很低(25%)。另一方面,当所有绘图功能都处于活动状态时,我的 CPU 使用率达到 140%,并且我的汽车在某些计算机上开始滞后。
谁能帮我?我做错什么了吗?
提前致谢。