久しぶりの記事です。
最近AS3を触っているんですが、Singletonを使いたい場面が出てきました。
アクションフレームでクラスを生成してしまうと、
gotoAndPlayなどで再度同じフレームに来た時にクラスを生成し直してしまい、
クラス変数も初期化されてしまうんですよね。
その回避方法としてSingletonを使うことにしました。
他にもっと良い方法があるとは思うのだけど。。
Singletonクラス
Singletonを呼び出すコード(アクションフレームでループさせる)
あとで色々調べていたら
http://unbland.org/blog/2008/10/23/160.html
こんなの発見しました。
public static var _singleton:Singleton = null;
を
public static var _singleton:Singleton = new Singleton;
にしてしまえばかなりシンプルなコードですむんですね。
デメリットもあるみたいだけど、シンプルでわかりやすい!
最近AS3を触っているんですが、Singletonを使いたい場面が出てきました。
アクションフレームでクラスを生成してしまうと、
gotoAndPlayなどで再度同じフレームに来た時にクラスを生成し直してしまい、
クラス変数も初期化されてしまうんですよね。
その回避方法としてSingletonを使うことにしました。
他にもっと良い方法があるとは思うのだけど。。
Singletonクラス
//--------------------------------------- //Singleton //--------------------------------------- package { import flash.display.*; public class Singleton { private var _cnt:int = 0; private var _limit:int = 0; public static var _singleton:Singleton = null; //--------------------------------------- //コンストラクタ //呼び出し側でnewできてしまうがこの際気にしない //--------------------------------------- public function Singleton() { } //--------------------------------------- //_singletonにインスタンスが格納されている場合はそのまま返す //されてなければインスタンスを生成する // //@return //Singleton型インスタンス //--------------------------------------- public static function getInstance():Singleton { if(_singleton === null) { _singleton = new Singleton; } return _singleton; } //--------------------------------------- //ループのリミットを設定 //--------------------------------------- public function getLimit(limit:int) { _limit = limit; } //--------------------------------------- //カウント実行 // //@return //true まだ平気 //false リミットに達した //--------------------------------------- public function executeCnt():Boolean { _cnt++; if(_cnt >= _limit) { return false; } else { return true; } } } }
Singletonを呼び出すコード(アクションフレームでループさせる)
var cnt:Singleton = Singleton.getInstance(); cnt.getLimit(10); trace(cnt.executeCnt());
あとで色々調べていたら
http://unbland.org/blog/2008/10/23/160.html
こんなの発見しました。
public static var _singleton:Singleton = null;
を
public static var _singleton:Singleton = new Singleton;
にしてしまえばかなりシンプルなコードですむんですね。
デメリットもあるみたいだけど、シンプルでわかりやすい!
※コメント投稿者のブログIDはブログ作成者のみに通知されます