AS3.0:匿名関数内での「this」
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を書くとアクティベーションオブジェクトを参照してしまうし、
かといって代わりに書くオブジェクトもない・・

今まで当たり前に使ってきた手法が使えなくなってしまい
かなり混乱しております^^;


何か良い代替方法を見つけたら、また追記しようと思います。
| コメント(0)
【Flash】AIRでできることいくつか
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の背景色を表示、「透明」は背景が透けます。

・ウィンドウの最大化/最小化/リサイズの制限
「詳細」タブより、ウィンドウの最大化、最小化、リサイズの有効/無効が
設定できます。


今回試したのは以上です。
またそのうちまとめたいと思います!
| コメント(0)
独自ドメイン可のサービスにネームサーバが用意されているとは限らない
2011.06.01

先日、知人がTumblrを独自ドメインで使いたいというので
運用する方法について調べる機会がありました。

今まで自分はネームサーバが用意されている
ホスティングサービスしか使ったことが無かったのですが、
Tumblrってネームサーバが用意されていないんですねー。
 
 
なので、フリーのDNSサーバーを使って
IPとドメインを紐付するか・・・

もしくはドメイン管理をしているサービスで
(ムームードメインやバリュードメイン、オナマエ等)
ドメインに対してAレコードとIPを設定する必要があるようです。
 
 
今まで当たり前のようにネームサーバを設定していたので
その他の手段があるなど全く気付かず。
 
自宅でWEBサーバーを立ててたりする人には
あって当然の知識なんでしょうね、
安くて省電力なPCでも買って自宅サーバー立ててみようかな?
なんて思ったりしました。

| コメント(0)

月別アーカイブ