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 を描画するグローバルBitmapDataが呼び出されています。screenBuffer例えば:

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は、 は sparkGroupコンポーネントです。

drawCar 以外のすべての描画関数をコメントアウトすると、私の車はうまく動作し、目に見えないボードと衝突し、CPU 使用率を非常に低く (25%) 維持できるため、物理学は問題ではないと確信しています。一方、すべての描画機能をアクティブにすると、CPU 使用率が 140% になり、一部のコンピューターで車の動作が遅くなり始めます。

誰でも私を助けることができますか?私は何か間違ったことをしていますか?

前もって感謝します。

4

0 に答える 0