Document/ActionScript3.0

基礎メモ

  • SWF ファイルのメインクラスは、常にSpriteクラス(表示クラス)を拡張します。

DisplayObjectContainer?周り

どの DisplayObjectContainer? インスタンスにも、表示オブジェクトコンテナの子の数を一覧表示する numChildren プロパティがあります。
また、表示オブジェクトコンテナの子リストは常にインデックスリストであるため、
リスト内のインデックス位置 0 から最後のインデックス位置 (numChildren - 1) までのすべてのオブジェクトを調べることができます。

for(var i:int = 0; i < (numChildren - 1); i++) {
    obj:DisplayObject = getChildAt(i)
}

※removeChildすると、自動で詰められる
※addChildAt?で割り込むことができる

removeChild() および removeChildAt?() メソッドは、
表示オブジェクトインスタンスを完全に削除しません。
コンテナの子リストから削除するだけです。
インスタンスは、別の変数で参照できますオブジェクトを完全に削除するには、delete 演算子を使用します。

  • 一つのオブジェクトを別の表示オブジェクトコンテナにaddChildしなおすと、そちらに移動する。
tf1:TextField = new TextField();
tf2:TextField = new TextField();
tf1.name = "text 1";
tf2.name = "text 2";

container1:Sprite = new Sprite();
container2:Sprite = new Sprite();

container1.addChild(tf1);
container1.addChild(tf2);
container2.addChild(tf1);

trace(container1.numChildren); // 1
trace(container1.getChildAt(0).name); // テキスト 2
trace(container2.numChildren); // 1
trace(container2.getChildAt(0).name); // テキスト 1

オブジェクト等のクローン

"深いコピー" とは、元の配列内で参照されているオブジェクトをすべてコピーすることです。その場合、元の配列とコピーした配列が同一のオブジェクトを参照する結果にはなりません。深いコピーを実行するには複数行のコードを記述する必要があり、通常、何らかの関数を作成することになります。この用途の関数は、グローバルなユーティリティ関数として実装するか、または Array のサブクラスにメソッドとして実装することが考えられます。

次の例では、深いコピーを実行するための clone() という関数を定義しています。採用したアルゴリズムは、Java プログラミングで一般的に使用されているテクニックです。まず元の配列を直列化して ByteArray? クラスのインスタンスを作成し、それを新しい配列に読み込むことでコピーを実行しています。コードに示されているとおり、この関数はオブジェクトを受け付けるため、インデックス配列と結合配列の両方に対応できます。

import flash.utils.ByteArray;

function clone(source:Object):*{
    var myBA:ByteArray = new ByteArray();
    myBA.writeObject(source);
    myBA.position = 0;
    return(myBA.readObject());
}

Singletonパターン

package {
 import flash.errors.IllegalOperationError;
 public class Singleton {
   private static var instance:Singleton = null;   // インスタンスを格納する
   private static var internallyCalled:Boolean = false;   // 内部呼出しかどうかを示すフラグ
   // コンストラクタ関数
   public function Singleton() {
     if (internallyCalled) {   // フラグが内部呼出しを示せば
       // 本来の処理を行う
       trace("constructor is called");   // テスト用
       internallyCalled = false;   // 内部呼出しのフラグを初期値に戻す
     } else {   // フラグが内部呼出しを示さなければ
       // エラーをthrow
       throw new IllegalOperationError ("Use Singleton.getInstance() to get the instance");
     }
   }
   // Singletonクラスのインスタンスを返す
   public static function getInstance():Singleton {
     if(Singleton.instance == null) {   // インスタンスが未生成なら
       trace("instance is being created");   // テスト用
       internallyCalled = true;   // 内部呼出しのフラグを設定
       instance = new Singleton();   // コンストラクタ関数を呼出す
     }
     return instance;   // 格納されたインスタンスを返す
   }
 }
}

イベントリスナに弱い参照

addEventListener(”type”, listener, false, 0, true)
5番目の引数にtrue

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-05-25 (金) 19:35:26 (4042d)