メイン

AS3 アーカイブ

2008年04月02日

継承とアクセス修飾子

as3の継承とアクセス修飾子の関係があいまいだったので、ちょいと調べたのでメモ。

as3のアクセス修飾子には、
・private
・protected
・internal
・public
の4つがある。

■private修飾子
privateは、そのクラスのみでアクセス可能。
継承した子孫クラスからもアクセスできない。

■protected
同じクラスとその派生クラス(継承したクラス)までアクセス可能。
継承したクラスにアクセスした場合のもっとも厳しい修飾子はこれになる。

■internal
同一パッケージ内からアクセス可能。

■public
どこからでもアクセス可能。

継承した場合に、コンストラクタ内でsuper()を行わずに継承したクラスを明示的に初期化しないと、
子孫クラスのコンストラクが終了したタイミングで、引数無しとしてsuper()が暗黙的に呼び出される。
よって、継承するクラスのコンストラクタに引数が必要で、デフォルト値も設定されていない場合には、必ず継承したクラスのコンストラクタでsuper()を実行して継承したクラスを初期化する必要がある。
ちなみに、super()の場所はコンストラクタ内であればどこでもかまわない。(as2ではコンストラクタの先頭で実行する必要があった。)

■override
overrideは、親クラスのメソッドを上書きたい時に用いる。
この時親クラスのメソッドのアクセス修飾子は、protected以上の必要がある。

override アクセス修飾子 function methodName():*{
}

上書きたいメソッドは、
・アクセス修飾子
・関数名
・引数の数と型
・戻り値の型
上記4つが一致している必要がある。

親クラスのメソッドを実行したい時は、super.methodName()で呼び出せる。
プロパティには、overrideは使えない。

継承されていれば、親クラスのstatic宣言されたメソッド、プロパティにもprotected以上ならアクセスできる。

とりあえずこんなかんじ。

2008年04月04日

バブルソート

バブルソートを調べてみたのでメモ。
バブルソートってのは、常に最後の二つを比較して、左の方が大きかったら要素を交換する。
それを要素分ひたすら繰り返すってことなんだな。多分。
以下プログラム。

var arr:Array = [4,6,2,9,1,90,22,89,7,11,2];

for ( var i:Number = 0; i < arr.length; i++ ){
for (var ii:Number = arr.length; ii >=1; ii-- ){
if(arr[ii] < arr[ii-1]){
var tmp_num:Number = arr[ii-1];
arr[ii-1] = arr[ii];
arr[ii] = tmp_num;
}
}
}
trace(arr);
出力結果:1,2,2,4,6,7,9,11,22,89,90

2008年08月24日

Event メタデータタグの使いどころ

他人のソースを見てると、
[Event(name="eventName", type="package.eventType")]
↑こんな謎のメタタグを見かける事があり、気になって少し調べてみたのでメモ。

結論から言うと、AsDocのイベント記述用とmxmlファイルでコンポーネントのイベントパラメータとして認識せさる用です。

書式は共通していて、
[Event(name="eventName", type="package.eventType")]
"name"パラメータはイベントの名前を指定して、"type"パラメータはイベントを定義するクラスを指定します。

AsDocで使う場合には、メタタグをclass宣言より上に記述する必要があります。

詳しくは、ここここで。

2008年08月29日

Flash Player 10でSWFUploadが動かない?

Flash Player 10では SWFUploadが動かなくなるかもしれません。 その理由は、Flash Player 10ベータでのセキュリティに関する変更が関係しています。
以下上記サイトから引用
Flash Player 10ベータでは、FileReference.browse操作とFileReference.download操作は、ユーザ操作によってトリガされたActionScriptを通じてのみ開始できます。これには、マウスのクリックやキーボード入力などの操作が含まれます。
SWFUploadは、JavaScriptからFilereference.browseを実行しているので、上記の条件から外れてしまいます。

SWFUploadを使っている人はご注意を。
なんか対処方法あるのかな?

2008年09月07日

E4XでXMLの全てのノードから検索

Flexのツリーコンポーネントで特定のノードを検索する必要があり調べたのでメモ。
var myXML:XML =
<root>
<child name="child1" />
<child name="child2">
<child name="child2-1" />
<child name="child2-2" />
<child name="child2-3" />
</child>
<child name="child3" />
<child name="child4" />
<child name="child5">
<child name="child5-1" />
<child name="child5-2" />
<child name="child5-3" />
<test name="name"/>
</child>
</root>
上記のXMLがあったとします。
<child name="child2-2" />
で、上記ノードを取得したいとすると、xmlの構造がわからない場合には
myXML.descendants().(@name=="child2-2")
もしくは
myXML..*.(@name=="child2-2");
で取得可能。
..とdescendants()は同じ意味で全ての子、孫などのノードを対象に検索してくれます。

About AS3

ブログ「godagoda.net」のカテゴリ「AS3」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

次のカテゴリはFLASHです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。