前回から20日ほど間をおいて再びActionScriptをいじってみた。
やはりアレだね、間をおくと見えなかったものが見えてくるね。
CPUが圧迫されていた理由が分かったよ。
必要のない描画を毎フレーム毎フレームやってたんでどんどん圧迫されていったらしい。
ActionScriptの描画は、一度描いたらずらすだけで良いってことを肝に銘じておかねば。
で、必要なときにだけ描けるように下のようなクラスに。
いや、誰が見るんだよってはなしだが、自分用の覚書?
基底クラスのdrawメソッドのfinalと、
継承クラスのdrawBodyメソッドのprotectedがポイントか。
実際にはコンパイル通らないけど、イメージってことで。
//=========================
// メインクラス
//=========================
class Main
{
private var _frameTimer:Timer; // フレームレートクラスを呼び出すタイマー
private var _base:Base; // 描画物
//--------------------------------------
// コンストラクタ
//--------------------------------------
public function MyKeyEvent()
{
// 描画物生成
_base = new MyCircle();
// フレーム管理用タイマー設定
_frameTimer = new Timer(42, 0);
_frameTimer.addEventListener(TimerEvent.TIMER, sequence);
_frameTimer.start();
}
//--------------------------------------
// フレーム毎の処理
//--------------------------------------
public function sequence(e:TimerEvent):void
{
// 描画
_base.draw();
}
}
//=========================
// 描画物の基底クラス
//=========================
class Base
{
//-----------------
// メンバ
//-----------------
private var _isNeedDraw:Boolean = true; // 描画する必要があるか否か
//-----------------
// メソッド
//-----------------
// 描画
// 外から呼ばれるメソッド
public final function draw():void
{
// 描画する必要があるか判定
if(_isNeedDraw){
// 描画
drawBody();
// 描画後、描画必要フラグを下げる
_isNeedDraw = false;
}
}
// 描画の本体
// このメソッドをオーバーライドして描画物を定義する
protected function drawBody():void{}
}
//=========================
// 描画物 - 円形 -
//=========================
class MyCircle extends Base
{
//-----------------
// メソッド
//-----------------
// 描画
protected override function drawBody():void
{
graphics.beginFill(color);
graphics.drawCircle(0, 0, radius);
}
}
PR