2

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

谁能帮我?我做错什么了吗?

提前致谢。

4

0 回答 0