ダブルバッファを使用してアニメーションを描画する単純なフラッシュ ゲームを開発しようとしています。
Event.ENTER_FRAME が発生すると、再描画が行われます。
ダブルバッファリングに使用されるバックバッファのタイプは BitmapData です。
アニメーションは非常に単純です。20x20 ピクセルのビットマップをバックバッファーに描画し、x 座標を増やして、キャンバスの左側から右側にスムーズに移動するようにします。これは基本的には問題なく機能しますが、よく見ると、この動きに大きな混乱が見られます。フレームレートは常に 60 を超えているため、これはフレーム レートとは関係がないようです。スムーズな動きの中断はアニメーションには受け入れられませんが、ダブルバッファリングに問題はないと確信しています。これはフラッシュプレーヤーの問題か何かではないかと心配しています...そうでなければ非常に安心します
簡単なアニメーションを示す swf を見てください。
https://dl.dropbox.com/u/55967135/test.swf
(ちなみに、動きが2つのフレーム間の時間に基づいている場合、アニメーションの中断も消えません。現在では、フレームごとに一定の2ピクセルです。)
上記の swf のソースコード全体を含む非常に軽量なフラッシュ ビルダー プロジェクトをアップロードしました: https://dl.dropbox.com/u/55967135/test.zip
public function enterFrame():void
{
// Calculate the time since the last frame (NOT USED IN THE EXAMPL PROGRAM)
var thisFrame : Date = new Date();
var dT : Number = (thisFrame.getTime() - lastFrame.getTime())/1000.0;
lastFrame = thisFrame;
// erase backBuffer
backBuffer.fillRect(backBuffer.rect, 0xFFFFFFFF);
// set new postion of the small testimage
if (this.pos > 600 || this.pos < 0) {
this.direction = !this.direction;
}
// increase / decrease vertical position
if (this.direction) {
this.pos += 2;
} else {
this.pos -= 2;
}
//trace(pos);
// draw small test image at postion "offset"
backBuffer.copyPixels( this.testGraphic.bitmap.bitmapData,
this.testGraphic.bitmap.bitmapData.rect,
new Point(pos, 0.0));
}
enterFrame() は、ダブルバッファリングを処理するクラス GraphicsController のメソッドです。アプリケーションの enterFrame(event) メソッドによって起動されます。
public function enterFrame(event:Event):void
{
GraphicsController.Instance.enterFrame();
myCanvas.graphics.clear();
myCanvas.graphics.beginBitmapFill(GraphicsController.Instance.backBuffer, null, false, false);
myCanvas.graphics.drawRect(0, 0, this.width, this.height);
myCanvas.graphics.endFill();
stage.invalidate();
}
助けていただければ幸いです
ありがとうございました