as3.0
2012.12.26
ボタンクリック時などのイベントハンドラの中で、
イベントが発生したムービークリップ自身を扱う書き方。
_btn.addEventListener(MouseEvent.CLICK, xClick);
function xClick(evt:MouseEvent):void {
var target_mc:MovieClip = evt.target as MovieClip;
}
上記のように書くことで、
_btn(クリックしたボタン)を「target_mc」として扱うことができます。
AS2からの移行で結構悩んだとこだったりします。
イベントが発生したムービークリップ自身を扱う書き方。
_btn.addEventListener(MouseEvent.CLICK, xClick);
function xClick(evt:MouseEvent):void {
var target_mc:MovieClip = evt.target as MovieClip;
}
上記のように書くことで、
_btn(クリックしたボタン)を「target_mc」として扱うことができます。
AS2からの移行で結構悩んだとこだったりします。
2012.11.27
addChild()で作成した表示オブジェクトに名前を付ける方法。
AS2.0では作成時に当たり前に付けていましたが、AS3.0では後から付けるようです。
インスタンス名の設定は .nameプロパティで設定できます。
var mc:MovieClip = new MovieClip();
mc.name = "sample";
また、インスタンス名を使って表示オブジェクトにアクセスするには、
getChildByName("インスタンス名") を使用します。
var mc:MovieClip = new MovieClip();
mc.name = "sample";
mc.x = 30;
trace(getChildByName("sample").x); //出力結果:30
参考にしたサイトは以下。
■ActionScript3.0でインスタンス名を調べたり設定する方法 | creator note http://creator.cotapon.org/articles/flash/actionscript3-0/actionscript3-0...
基本的なことなのに結構面倒な手順だなと思いましたが、
そもそもインスタンス名を使ってのやりとりはAS3.0では
あまり利点がないそうです。
AS3.0の入門書を読んでも上記のような手順は紹介されてませんでしたし、
根本的な頭の切り替えが必要そうです!
【おまけ】
配列アクセス演算子を使えば文字列で変数名を付けられます。
インスタンス名の利点がないのは、変数名で同じことができる、ということかも。
var mcName:String = "sample";
this[mcName] = new MovieClip();
this[mcName].x = 30;
trace(this.sample.x); //出力結果:30
AS2.0では作成時に当たり前に付けていましたが、AS3.0では後から付けるようです。
インスタンス名の設定は .nameプロパティで設定できます。
var mc:MovieClip = new MovieClip();
mc.name = "sample";
また、インスタンス名を使って表示オブジェクトにアクセスするには、
getChildByName("インスタンス名") を使用します。
var mc:MovieClip = new MovieClip();
mc.name = "sample";
mc.x = 30;
trace(getChildByName("sample").x); //出力結果:30
参考にしたサイトは以下。
■ActionScript3.0でインスタンス名を調べたり設定する方法 | creator note http://creator.cotapon.org/articles/flash/actionscript3-0/actionscript3-0...
基本的なことなのに結構面倒な手順だなと思いましたが、
そもそもインスタンス名を使ってのやりとりはAS3.0では
あまり利点がないそうです。
AS3.0の入門書を読んでも上記のような手順は紹介されてませんでしたし、
根本的な頭の切り替えが必要そうです!
【おまけ】
配列アクセス演算子を使えば文字列で変数名を付けられます。
インスタンス名の利点がないのは、変数名で同じことができる、ということかも。
var mcName:String = "sample";
this[mcName] = new MovieClip();
this[mcName].x = 30;
trace(this.sample.x); //出力結果:30
2011.06.09
AS3.0でハマったこと、thisについて。
匿名関数内でthisを使ったら、予想外の動作をしたのでメモしておきます。
「MC」というムービークリップ内に「btn」というボタンを配置し、
フレームには以下のように書きました。
■AS3.0
btn.addEventListener( MouseEvent.MOUSE_UP, function(){
trace(this.x);
});
匿名関数内で this を使用しています。
ここで、this は「MC」を参照するだろうと勝手に考えていたのですが・・
出力結果は undefined 。
「MC」でも「btn」でもありませんでした。
じゃあこの this は何を指しているのかというと、
こちらのサイトでまとめられていました。
AS3のクロージャ
・・はい、AS3.0学びたての自分では、この概念は難しすぎます。
それでも辛うじてわかったことは、
1.この関数はメソッド内で定義されているため「関数クロージャ」に分類され、
2.その関数クロージャは呼び出し方によって参照先が変わり、
3.匿名関数の場合はどのインスタンスにも関連づけられていないためアクティベーションオブジェクトを参照してしまう
ということです。(正直、これすら間違っているかもしれませんが・・)
ですので、this を使ったとしても「MC」を参照できないのでした。
これで困ったのは配列アクセス演算子を使って
this["mc_"+ i].stop();
というような指示をしようとしたとき。
thisを書くとアクティベーションオブジェクトを参照してしまうし、
かといって代わりに書くオブジェクトもない・・
今まで当たり前に使ってきた手法が使えなくなってしまい
かなり混乱しております^^;
何か良い代替方法を見つけたら、また追記しようと思います。
匿名関数内でthisを使ったら、予想外の動作をしたのでメモしておきます。
「MC」というムービークリップ内に「btn」というボタンを配置し、
フレームには以下のように書きました。
■AS3.0
btn.addEventListener( MouseEvent.MOUSE_UP, function(){
trace(this.x);
});
匿名関数内で this を使用しています。
ここで、this は「MC」を参照するだろうと勝手に考えていたのですが・・
出力結果は undefined 。
「MC」でも「btn」でもありませんでした。
じゃあこの this は何を指しているのかというと、
こちらのサイトでまとめられていました。
AS3のクロージャ
・・はい、AS3.0学びたての自分では、この概念は難しすぎます。
それでも辛うじてわかったことは、
1.この関数はメソッド内で定義されているため「関数クロージャ」に分類され、
2.その関数クロージャは呼び出し方によって参照先が変わり、
3.匿名関数の場合はどのインスタンスにも関連づけられていないためアクティベーションオブジェクトを参照してしまう
ということです。(正直、これすら間違っているかもしれませんが・・)
ですので、this を使ったとしても「MC」を参照できないのでした。
これで困ったのは配列アクセス演算子を使って
this["mc_"+ i].stop();
というような指示をしようとしたとき。
thisを書くとアクティベーションオブジェクトを参照してしまうし、
かといって代わりに書くオブジェクトもない・・
今まで当たり前に使ってきた手法が使えなくなってしまい
かなり混乱しております^^;
何か良い代替方法を見つけたら、また追記しようと思います。
2011.06.08
現在、AS3.0とAIRの勉強を少しずつ進めています。
その中で、AIRでのみできることがいくつか出てきたので書いておこうと思います。
(まだまだ、ホントに簡単なもののみですが;)
■常に前面に表示
・常に前面に表示する
NativeApplication.nativeApplication.alwaysInFront = true;
・元に戻す
NativeApplication.nativeApplication.alwaysInFront = false;
■ウィンドウ操作系
ウィンドウ操作ボタンを自分で用意する場合、それぞれのボタンに設定します。
・ウィンドウの移動
MC_1.addEventListener(MouseEvent.MOUSE_DOWN, moveWindow);
function moveWindow(evt:MouseEvent) {
stage.nativeWindow.startMove();
}
・ウィンドウを閉じる
button_1.addEventListener(MouseEvent.CLICK, closeWindow);
function closeWindow(evt:MouseEvent) {
stage.nativeWindow.close();
}
・ウィンドウの最大化
button_2.addEventListener(MouseEvent.CLICK, maximizeWindow);
function maximizeWindow(evt:MouseEvent) {
stage.nativeWindow.maximize();
}
・ウィンドウの最小化
button_3.addEventListener(MouseEvent.CLICK, minimizeWindow);
function minimizeWindow(evt:MouseEvent) {
stage.nativeWindow.minimize();
}
■ウィンドウの設定
スクリプトではないですが、関係する部分でしたので。
ファイル>adobe AIR 2 設定 を開きます。
・デフォルトウィンドウの非表示
↑でオリジナルのボタンを用意した場合、もともとあるウィンドウのフレームは
いらないので隠しましょう。
「一般」タブより、ウィンドウスタイルを「カスタムクローム」に設定します。
「不透明」はFlashの背景色を表示、「透明」は背景が透けます。
・ウィンドウの最大化/最小化/リサイズの制限
「詳細」タブより、ウィンドウの最大化、最小化、リサイズの有効/無効が
設定できます。
今回試したのは以上です。
またそのうちまとめたいと思います!
その中で、AIRでのみできることがいくつか出てきたので書いておこうと思います。
(まだまだ、ホントに簡単なもののみですが;)
■常に前面に表示
・常に前面に表示する
NativeApplication.nativeApplication.alwaysInFront = true;
・元に戻す
NativeApplication.nativeApplication.alwaysInFront = false;
■ウィンドウ操作系
ウィンドウ操作ボタンを自分で用意する場合、それぞれのボタンに設定します。
・ウィンドウの移動
MC_1.addEventListener(MouseEvent.MOUSE_DOWN, moveWindow);
function moveWindow(evt:MouseEvent) {
stage.nativeWindow.startMove();
}
・ウィンドウを閉じる
button_1.addEventListener(MouseEvent.CLICK, closeWindow);
function closeWindow(evt:MouseEvent) {
stage.nativeWindow.close();
}
・ウィンドウの最大化
button_2.addEventListener(MouseEvent.CLICK, maximizeWindow);
function maximizeWindow(evt:MouseEvent) {
stage.nativeWindow.maximize();
}
・ウィンドウの最小化
button_3.addEventListener(MouseEvent.CLICK, minimizeWindow);
function minimizeWindow(evt:MouseEvent) {
stage.nativeWindow.minimize();
}
■ウィンドウの設定
スクリプトではないですが、関係する部分でしたので。
ファイル>adobe AIR 2 設定 を開きます。
・デフォルトウィンドウの非表示
↑でオリジナルのボタンを用意した場合、もともとあるウィンドウのフレームは
いらないので隠しましょう。
「一般」タブより、ウィンドウスタイルを「カスタムクローム」に設定します。
「不透明」はFlashの背景色を表示、「透明」は背景が透けます。
・ウィンドウの最大化/最小化/リサイズの制限
「詳細」タブより、ウィンドウの最大化、最小化、リサイズの有効/無効が
設定できます。
今回試したのは以上です。
またそのうちまとめたいと思います!