メイン どこでもFlash【携帯向けFlash関連】 FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 | 投稿するにはまず登録を |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tato-tato | Åê¹ÆNo.39735 投稿日時: 2008-7-31 13:01 |
新米 居住地: 投稿: 7
使用環境:
XP Home(SP2) 10.1.3 8pro. + CS3 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 あにぃ様、野中様 コメントありがとうございます。
デフォルト参照(野中様のサイト)と言うものがあるのですね、 やっと理解できました。 今までの私は、enter_ltnでよびだしているfunctionは、enter_ltnオブジェクトの内にあると思っていたのですが、 そこに問題があったようです。 下記ソース、AはBと同意であり、そのデフォルト参照はfuncZを定義した、Test(コンストラクタ)を指す。ということですね。 // A
// B
つまり、enter_ltnで呼び出しているfuntionは、Test(コンストラクタ)内で定義されているものであり、 そのfunction内でのデフォルト参照は、functionを定義しているTest(コンストラクタ)を指す。ということですね。 そして、あにぃ様にご助言頂きましたソースは、 スコープ外にあったfuncAの定義場所を移動させることで、参照可能になった。ということですね! |
野中文雄 | Åê¹ÆNo.39732 投稿日時: 2008-7-30 22:24 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 まず、thisの参照先を確かめるべきでしょう。キーワードは「Activationオブジェクト」です。
参考: FLASH-japan「関数をメインタイムライン上に集結させたいの」 にゃあプロジェクト「Activationオブジェクトって何?」 引用: tato-tatoさんは書きました: |
あにぃ | Åê¹ÆNo.39728 投稿日時: 2008-7-30 14:02 |
職人 居住地: 北海道 投稿: 250
使用環境:
Flash8 FlashCS3 WinXP FlashLite1.1 / 2.0 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 funcZがenter_ltnからTestに移動したとすれば、その中でのthisの参照はどこになるか考えてみましょう。おのずと答えがでるはずです。
引用: あと、本件とは関係の無いことですが、 投稿フォームの使い方 このへんを読みましょう^^
|
tato-tato | Åê¹ÆNo.39727 投稿日時: 2008-7-30 13:46 |
新米 居住地: 投稿: 7
使用環境:
XP Home(SP2) 10.1.3 8pro. + CS3 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 野中様、度々ありがとうございます。
ひろゆき様、いつもサイト拝見しております。 まずソースですが、下記のように変更し、求める結果が得られるようになりました。 先に、ご助言頂きました、あにぃ様、野中様、ひろゆき様、ありがとうございます。 -- ソース -- import mx.utils.Delegate; class Test { private var enter_ltn:Object; public function Test() { enter_ltn = new Object(); enter_ltn.onKeyDown = Delegate.create(this, funcZ); function funcZ(){ if (Key.getCode() == Key.ENTER) { trace("check_A"); funcA(); } }; Key.addListener(enter_ltn); } private function funcA() { trace("check_B"); } } >>野中様 スコープに問題があったのは理解できていたのですが、 Delegateの使用法を完全に誤ってました。。。 完全に私の読解力不足です。すみません。 >>ひろゆき様 「Delegateとスコープ」拝見しました。 疑問点を一つひとつ解消していく流れが、とても理解しやすかったです。 --- 結果、[Delegate.create]を使用して思い通りの結果を得られるようになったのですが、 スコープについて未だ理解できずにいる部分があります。 今の私は、[enter_ltn]にあったスコープを、funcZをコールする時のみ[this(Testクラスのインスタンス)]に移動させる。と解釈しているのですが、 そうなると、あにぃ様にご助言頂きました際にでた、下記ソースで、[funcA]は[enter_ltn]の外にあるのに、[(this.)funcA]だけで何故アクセスできるのでしょうか。。。 class Test{ private var enter_ltn:Object; public function Test(){ enter_ltn = new Object(); enter_ltn.onKeyDown = function(){ if(Key.getCode() == Key.ENTER){ trace("check_A") funcA(); } }; Key.addListener(enter_ltn); function funcA(){ trace("check_B"); }; }; }; もっとスコープについて勉強するつもりですが、 もしできましたら切っ掛けになるワードなど教えて頂けませんでしょうか。 あと、本件とは関係の無いことですが、 ソース部分の、行頭に「タブ」や「スペース」を入力して もっと読み易く書き込みたいのですが、何故かプレビュー時に省略されてしまいます。。。 皆様はどの様にして行頭の間隔を空けてらっしゃるのかご教授頂けませんでしょうか。。。 |
野中文雄 | Åê¹ÆNo.39721 投稿日時: 2008-7-29 20:15 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 何が問題なのかは、おわかりになっていますか?
また、スクリプトはシンタックスどおりに記述しなければ、正しく動作しないのは当然です。 [Key.addListenerメソッド]より引用: public static addListener(listener:Object) : Void 「イベントの委譲 (Delegateクラス)」より引用: Delegate.create(スコープオブジェクト, 関数) 引用: tato-tatoさんは書きました: |
ひろゆき | Åê¹ÆNo.39720 投稿日時: 2008-7-29 20:08 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動
このthisは、enter_ltnを指すことになります。
「Delegateとスコープ (2)」も参考まで。
|
tato-tato | Åê¹ÆNo.39719 投稿日時: 2008-7-29 19:57 |
新米 居住地: 投稿: 7
使用環境:
XP Home(SP2) 10.1.3 8pro. + CS3 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 あにぃ様、コメントありがとうございます。
あにぃ様のご助言通り、コンストラクタの中で定義したら出来ました! コンストラクタの中では、[function]を使わないと言う先入観があったんですが、違っていたようですね。 と言いながら、改めてソースを見ると[enter_ltn.onKeyDown = funciton()]で既に書いてますね…(苦笑) あにぃ様、野中様、ありがとうございました! |
tato-tato | Åê¹ÆNo.39718 投稿日時: 2008-7-29 19:40 |
新米 居住地: 投稿: 7
使用環境:
XP Home(SP2) 10.1.3 8pro. + CS3 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 野中様、コメントありがとうございます。
いつも野中様のサイトで勉強させて頂いております。 引用:
上記ご助言を頂きまして、参考にさせて頂きましたが、未だ解決できずにおります。 -- ソース変更前 -- Key.addListener(enter_ltn); -- ソース変更後 -- import mx.utils.Delegate; class Test{ <中略> Key.addListener(enter_ltn, Delegate.create(func_A)); 上記のように変更しましたが、結果は変わりませんでした… また、[addListener]を[addEventListeher]に変更しようとしましたが、Keyクラスに[addEventListener]は使用できないとエラーが表示されてしまいます…。 (コンポーネントや、その他オブジェクトを押下するのではなく、Keyクラスで処理したいのです) 頂戴しましたドキュメントを参照しますと、コンポーネントと[addEventListener]を利用した例しかなく、何ともままならない状態です。 私の読解力不足が問題かもしれませんので、もう一度最初から読み直してみます。。。 |
あにぃ | Åê¹ÆNo.39717 投稿日時: 2008-7-29 19:09 |
職人 居住地: 北海道 投稿: 250
使用環境:
Flash8 FlashCS3 WinXP FlashLite1.1 / 2.0 |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動
funcAをfunction Testの中で定義したらできるような気がしますが。。
|
野中文雄 | Åê¹ÆNo.39715 投稿日時: 2008-7-29 17:20 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: FlashLite2.0 - カスタムクラス内での、イベントリスナーの挙動 Delegateクラスを使われるとよいでしょう。
|
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |