公開日: 2009年09月28日(Mon)
前回やってみてから長らく放置していた FlexSDK + Action Script 3 のお勉強。ほんのちょびっとだけど進んでみた。
今回やってみたのは、外部の *.as ファイルのインクルードと、超簡単なクラスの作成。
ActionScriptを外部化して、インクルードしてみた。インクルードの書き方は次のような感じ。
<mx:Script><![CDATA[
include "include02.as";
]]></mx:Script>
次のように書いてもよいようだ。
<mx:Script source="include01.as" />
このテストで使ったサンプルは下記。ご参考までに。
まだ詳しくはよくわからないのだが、パッケージ化して、import しないとできないようだ。今回は、sample というパッケージの sample というクラスを作って、インスタンス化するところまでやってみた。
このテストで使ったサンプルは下記。これを見ながら読んでいただいた方がわかりやすいと思われる。。
まず、sample/sample.as
というファイルを作って、下記のように書いた。
package sample{
import mx.controls.Alert;
public class sample{
public function sample():void{
Alert.show('sample() 実行しました。');
}
public function test001():void{
Alert.show('test001() 実行しました。');
}
}
}
パッケージ sample の クラス sample に、sample() と test001() という2つのメソッドを実装して、それぞれ Alert.show()
でダイアログを出すようにしてある。クラス名と同名のメソッド sample() は、このクラスのコンストラクタ(インスタンス化したと同時に自動的に実行される)になるようだ。
このクラスを呼び出すために、呼び出し側では次の行を書いて読み込む。
import sample.*;
この sample.*
は、「sampleというパッケージの、*(全ての)クラスをロードする」という意味らしい。
クラスファイルのファイル名にも意味があって、sample/sample.as
は、「sample というパッケージ(←ディレクトリ名で表現)の、sample というクラス(←ASファイル名で表現)を定義する」というような命名規則になっており、この通りのファイル名を付けないと正しくコンパイルできなかった。
これをインスタンス化して、メソッドを実行しているのが下記の記述。
public function instanceTest():void{
alert('テスト中:1');
var inst:sample = new sample();
inst.test001();
alert('テスト中:2');
}
このうち、
var inst:sample = new sample();
この行でインスタンス化している。インスタンス inst
の型は、sample になることに注意。この時点で、コンストラクタ sample() は実行される。
そして、
inst.test001();
ここで test001() を実行している。これで、合計4つのアラートダイアログが立て続けに表示されるはずだ。
ここまでやってみて、ちょっと疑問が起きた。各行で1個ずつ、Alert.show()
によるダイアログが出るはず(alert() はショートカットだと思ってください)なのだが、順番が逆に出てしまった。
「ActionScript3は処理が下から順番に進むのか!?」などというありえない憶測をしていたら、こちらの方が答えを教えてくれていた。
// Alert時点で処理が止まる訳ではない。
// => 一番最後に出したAlertが一番手前に出る
JavaScript の alert()
は、実行してからOK押すまでの間、処理は停止する。しかし、ActionScript3の Alert.show()
は、停止しないそうだ。そして、後に実行されたダイアログが手前に表示されるため、逆向きに処理が進んでいるように見えてしまうようだ。(当然ながら、逆向きに実行されているわけではなかった!)
OK押すまで処理を止めることはできないのかな?
今後の研究課題のひとつにします。
ということで、今日はここまで!
公開日: 2009年09月28日(Mon)