メイン

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()は同じ意味で全ての子、孫などのノードを対象に検索してくれます。

2009年01月10日

データ型のデフォルト値

ActionScript2,3それぞれのデータ型のデフォルト値をメモ。

String型
as2:undefined
as3:null

Number型
as2:undefined
as3:NaN

int型
as2:ー
as3:0

uint型
as2:ー
as3:0

Array型
as2:undefined
as3:null

Object型
as2:undefined
as3:null

Boolean型
as2:undefined
as3:false

型指定なし
as2:undefined
as3:undefined(var hoge:*)

2009年02月07日

日本語形態素解析

以前から「夜の」って言葉を付けると、だいぶ卑猥な印象を与える事に個人的に注目していたのですが、yahooの日本語形態素解析を使えば適当な文章をちょいと卑猥な文章に変換できるかなと思ってやってみた。けどそんなに卑猥にならなかった。

夜のRSS

日本語形態素解析apiの使い方は簡単で、パラメータで渡した文章を要素ごとに分解してxmlデータで返してくれるというシンプルなものでした。 ActionScript3で開発する上でのポイントは、
•解析したい文字列を、encodeURI()でURLエンコードする。
as3からescape()の仕様が変わったので、encodeURI()メソッドを使う。
•Namespaceに"urn:yahoo:jp:jlp"を設定する。こんな感じに↓。
private var ns:Namespace = new Namespace("urn:yahoo:jp:jlp");
default xml namespace = ns;
これくらいです。あとはご自由にって感じですね。

追記09/02/13
•windowsでの文字化けを修正
•夜の微調整
•namespaceの削除に挑戦したい

2009年02月17日

Vectorクラスメモ

FlashPlayer10から追加されたクラスに、Vectorというものがあります。 Vectorクラスというのは、型の指定ができるArray(配列)クラスみたいなもので、Arrayより高速に処理できるそうです。 実際、VectorクラスはArrayクラスの全てのメソッドを実装しています。
Vectorクラスのインスタンスは下記のような感じで作成します。
import __AS3__.vec.Vector;
var vector:Vector.<型> = new Vector.<型>();
Vectorのコンストラクタには、
Vector(length:uint = 0, fixed:Boolean = false)
という2つの引数があります。
1つめの1engthは、初期化時に何個の要素を保持するかを指定します。
2つめのfixedは、1つめの引数にベクターの長さが固定されるか(true)、または変更できるか(false)を指定します。

Arrayには無い便利なメソッドとして、
•every(callback:Function, thisObject:Object = null):Boolean
指定された関数について false を返すアイテムに達するまで、ベクター内の各アイテムにテスト関数を実行します。

var vector:Vector. = new Vector.();
vector.push(0);
vector.push(1);
vector.push(2);
vector.push(3);
vector.push(4);
vector.every(everyTest);

function everyTest(item:int, index:int, vector:Vector.):Boolean{
if(item < 2){
trace("item:"+item);
trace("index:"+index);
return true;
}
return false;
}
//trace結果
item:0
index:0
item:1
index:1


•filter(callback:Function, thisObject:Object = null):Vector.
ベクター内の各アイテムについてテスト関数を実行し、指定された関数について true を返すすべてのアイテムを含む新しいベクターを返します。
var vector:Vector. = new Vector.();
vector.push(0);
vector.push(1);
vector.push(2);
vector.push(3);
vector.push(4);
vector.every(filterTest);

function filterTest(item:int, index:int, vector:Vector.):Boolean{
if(item < 2){
trace("item:"+item);
trace("index:"+index);
return true;
}
return false;
}
//trace結果
item:0
index:0
item:1
index:1


•forEach(callback:Function, thisObject:Object = null):void
ベクター内の各アイテムについて関数を実行します。
var vector:Vector. = new Vector.();
vector.push(0);
vector.push(1);
vector.push(2);
vector.push(3);
vector.push(4);
vector.every(forEachTest);

function forEachTest(item:int, index:int, vector:Vector.):void{
trace("item:"+item);
trace("index:"+index);
}
//trace結果
item:0
index:0
item:1
index:1
item:2
index:2
item:3
index:3
item:4
index:4

なかなか使えそうです。
詳しくは、Using Vectors in ActionScript 3 and Flash Player 10などをご覧ください。

2009年03月04日

flashvars取得

AS3でのflashvars取得方法メモ。

FlashCS3では、タイムラインもしくはドキュメントクラスの、
loaderInfo.parameters

Flexでは、
Application.application.parameters

About AS3

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

次のカテゴリはFLASHです。

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