在flex中开发的游戏:性能问题绘制了许多缩放的位图

时间:2012-11-28 15:50:28

标签: flex drawing cpu-usage bitmapdata

我用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%,而且我的车在某些计算机上开始滞后。

任何人都可以帮助我吗?我做错了吗?

提前致谢。

0 个答案:

没有答案