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% になり、一部のコンピューターで車の動作が遅くなり始めます。
誰でも私を助けることができますか?私は何か間違ったことをしていますか?
前もって感謝します。