2ntブログ
短期合宿
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ActionScript SpriteにGraphicsでいっぱい描画すると重くなる
取得したマウス座標をただ直線で結ぶだけのコードが
グルグルと線を描いてると、何故かどんどん重くなってカクカクになる。
//抜粋-----------------------------------------------------
private var dragStart:Point = null;

private function onMouseDown( e: MouseEvent ): void{
if( dragStart == null ){
dragStart = new Point( mouseX, mouseY );
}
}
private function onMouseMove( e: MouseEvent ): void{
if( dragStart ){

//draw
var g:Graphics = sp.graphics;
g.lineStyle( 4, 0x661111 );
g.moveTo( dragStart.x, dragStart.y );
g.lineTo( mouseX, mouseY );

dragStart.x = mouseX;
dragStart.y = mouseY;
}

}
private function onMouseUp( e: MouseEvent ): void{
dragStart = null;
}

//ここまで---------------------------------------------------------

原因分からず困る。
試しにgraphics.clear()を呼ぶと最初の軽い状態に戻るんで、SpriteかGraphics。
で、気が付く。
Spriteを拡大縮小回転しても綺麗なのは内部で描画したベクターのObject持ってるから。
それが多くなるのが原因?もしかして追加描画するたびに全ベクターデータを再描画している?
(結局そうなのかどうなのかは分からず)

リファレンスを探すとSprite.cacheAsBitmapと言うそれっぽい物があるんで、
これをtrueで解決!と思ったのにやっぱり変わらず・・・
Google先生で調べると、「変化が無かった時にキャッシュを使う」だけらしい。

結局上のコードはGraphicsで描いてはbmp.bitmapData.draw()することに。

//抜粋-----------------------------------------------------
private function onMouseMove( e: MouseEvent ): void{
if( dragStart ){

//draw
var tmpSp:Sprite = new Sprite();
var g:Graphics = tmpSp.graphics;
g.clear();
g.lineStyle( 4, 0x661111 );
g.moveTo( dragStart.x, dragStart.y );
g.lineTo( mouseX, mouseY );

dragStart.x = mouseX;
dragStart.y = mouseY;

bmp.bitmapData.draw( tmpSp );
}

}
//ここまで-----------------------------------------------------

解決したけど、なんかアホな事をしてる気がしてすっきりしない。
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック