メイン コーダーズルーム【スクリプト系】 Windowコンポーネントについて | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kirarin | Åê¹ÆNo.9129 投稿日時: 2004-7-14 12:46 |
職人 居住地: 彩の国 投稿: 214
使用環境:
Windows7 IE 8 Flash CS4 Flash Player WIN 10,0,45,2 ------------------------- WindowsXP Professional SP3 IE7.0 Flash 8 Professional Flash Player 10.0.12.36 ------------------------- Windows2003 Sp1 IE6.0 SP1 Flash MX 2004 ... |
Windowコンポーネントについて いつもお世話になっております。kirarinです。
Windowというコンポーネントを使ってみました。 メッセージなどを表示するのに、下にあるボタンを一度で使用不可状態にしてくれるので、楽かなと思いまして・・・(^^;) でもちょっとわからないことがありました。 まず、Windowコンポーネントをライブラリに登録して、 ・ActionScriptに書き出し ・最初のフレームに書き出し にチェックを入れました。 次にWindowの中に表示したいMCを作成しました。 ・ダイナミックテキスト(msg_txt) ・Buttonコンポーネント2つ(yes_btn、no_btn) このMCにも ・ActionScriptに書き出し ・最初のフレームに書き出し にチェックを入れ ・識別肢:Msg ・AS2.0クラス:mx.core.View としました。 (このあたりはHelpの通りです) 最後にステージにButton(Exit_btn)を1つおき これのclickイベントに以下の記述をしました。
はい、いいえのボタン2つは表示されているのですが、"終了します"の文字がWindow内に表示されていません。 ちなみに、これを静的テキストにしてみても結果は同じでした。 何か設定漏れなどありますでしょうか? お気づきの方おられましたら、アドバイスよろしくお願いいたしますm(__)m
|
野中文雄 | Åê¹ÆNo.9130 投稿日時: 2004-7-14 13:11 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: Windowコンポーネントについて ひと呼吸待たなければいけないという、ありがちのパターンですね。
引用: kirarinさんは書きました: フレーム待ちのスクリプトを追加します。 引用: 最後にステージにButton(Exit_btn)を1つおき |
kirarin | Åê¹ÆNo.9133 投稿日時: 2004-7-14 14:53 |
職人 居住地: 彩の国 投稿: 214
使用環境:
Windows7 IE 8 Flash CS4 Flash Player WIN 10,0,45,2 ------------------------- WindowsXP Professional SP3 IE7.0 Flash 8 Professional Flash Player 10.0.12.36 ------------------------- Windows2003 Sp1 IE6.0 SP1 Flash MX 2004 ... |
Re: Windowコンポーネントについて 野中さん、いつもありがとうございますm(__)m
>ひと呼吸待たなければいけないという、ありがちのパターンですね。 なるほど、flashを触り始めてから5ヶ月、この手の内容はたしかに多い気がしてきました。 今後は注意したいと思います。 教えていただいたfunctionを付け加えたところ、無事表示することが出来ました。 ありがとうございました。m(__)m
|
youich | Åê¹ÆNo.9157 投稿日時: 2004-7-14 22:58 |
職人 居住地: kobe 投稿: 349
使用環境:
Tiger |
Re: Windowコンポーネントについて 引用:
野中さんがおっしゃるようにcontentに実際にMovieClip(Msg)がアタッチされるのはワンフレーム後だから、 逆にWindowを作った(createPopUpの)後に Window#createChild(View#createChild)内で呼び出されるaddLayoutObjectを定義してもよさそうですね。
|
kirarin | Åê¹ÆNo.9182 投稿日時: 2004-7-15 12:39 |
職人 居住地: 彩の国 投稿: 214
使用環境:
Windows7 IE 8 Flash CS4 Flash Player WIN 10,0,45,2 ------------------------- WindowsXP Professional SP3 IE7.0 Flash 8 Professional Flash Player 10.0.12.36 ------------------------- Windows2003 Sp1 IE6.0 SP1 Flash MX 2004 ... |
Re: Windowコンポーネントについて youichさん、情報ありがとうございましたm(__)m
さきのサンプルに「クローズボタン(右上隅の「×」)を押したらdeletePopUp」というリスナーと追加してみました。 これも今回と同様、1テンポ遅らせないといけないのでね。 なので、addLayoutObject 内でaddEventListenerを追加してみました。
ちなみに、リスナーは_rootのタイムラインに以下のように指定しました。
ありがとうございますm(__)m。 今回addLayoutObject というのを始めて知ったので調べてみた。 (Macromedia Flash MX 2004 の v2 仕様コンポーネントアーキテクチャーについて) ↑のページでもうひとつ、doLayoutというのが出ていましたが、これは実際どのようなタイミングで動くものなのかご存知でしょうか。 上記サンプルに
文献ではsizeに関わるようなことが書いてあったのですが、いまひとつ雲をつかんでいるような感じです。 windowコンポーネントなどを使わずに、自分で作ったMCの表示を切り替えれば済む問題かもしれませんが、デザインセンスがない自分には、こういうコンポーネントはぜひとも使いたいコンポーネントなのです。 投稿タイトルの話の範囲内だとは思いますが、当初の質問と内容が変わってきてしまいました(^^;) 別投稿が望ましければ、分けたいと思いますm(__)m どうぞよろしくお願いいたします。
|
youich | Åê¹ÆNo.9201 投稿日時: 2004-7-15 22:48 |
職人 居住地: kobe 投稿: 349
使用環境:
Tiger |
Re: Windowコンポーネントについて 引用:
さきのサンプルに「クローズボタン(右上隅の「×」)を押したらdeletePopUp」というリスナーと追加してみました。 addEventListenerはワンテンポ遅らせなくても大丈夫ですよ。 _root.myWindow = mx.managers.PopUpManager.createPopUp(_root,、、、、 の後_root.myWindow.contentがすぐに生成されないのはコンポーネントの 作者が意図的にワンフレーム後にcontentをアタッチムービーしているからで 例えば下のようにWindow.validateNowプロパティの値をtrueに設定すればワンフレーム待たずに myWindow.contentは生成されるのでcontent.msg_txt.textへの値もすぐに設定できます。
しかしこの場合は逆に _root.myWindow = mx.managers.PopUpManager.createPopUp(_root,、、、、 の後で_root.myWindow.addLayoutを定義してもすでに手後れ、呼び出されないと 言う事になります。 addLayoutObjectはmx.core.Viewで定義されておりmx.core.ViewのcreateChildメソッドの中から 呼び出されますが、View -> ScrollView -> Window のどの階層でも実装されていません。 (ちなみに、addLayoutの引数はcontentの中身になります、kirarinさんの場合は"Msg"シンボルです。) で、Viewを継承するWindowも必然的にこのcreateChildメソッドをもっており 実際にWindow.contentPathにセットされた値(kirarinさんの場合"Msg")から attachMovie等でWindow内部にシンボルを取り込むのがこのcreateChildメソッドです。 ということでWindow.createChildメソッドが呼び出されるタイミングがcontentPathに指定したシンボルが 生成されるときであり、addLayoutObjectが呼び出されるタイミングになります。 createChildは直接的にはcontentPathセッターから呼び出されるのですが、おおまかにいって Window.drawメソッドから呼び出されます、その流れはおおざっぱに下のようになります。 Windowコンストラクタ ↓ ※プロパティvalidateNow が true の場合--> draw(); //すぐにdrawする。 ※プロパティvalidateNow が false の場合 --> invalidate(); //ワンフレーム後にdrawする。こちらが通常 引用: 今回addLayoutObject というのを始めて知ったので調べてみた。 doLayoutはmx.core.Viewで定義されていてmx.core.View#sizeの中で呼び出されます。
また、doLayoutはView -> ScrollView -> Windowの各階層でそれぞれ実装されており、size以外からも レイアウトの修正が必要な時に呼び出される場合もあります。 (sizeメソッドは基本的にsetSizeメソッドから呼び出されます。) kirarinさんのサンプルではもともとWindowに定義されてあったdoLayoutを上書きしてしまってる状態になって しまってるので、描画がくずれてしまうということになります。 なのでWindowのサブクラスからsuper.doLayoutを呼び出すように Window.prototype.doLayoutを呼び出しておけば描画はくずれませんですね。
doLayoutが3回呼び出されていることですが、、、 1回めのdoLayoutはButtonに書かれたWindowを生成した後のkirarinさんのsetSizeのコールから UIObject#setSize->size->doLayout 2回めのdoLayoutはWindow#drawから Window#draw->size->doLayout (ちょうどcreateChildが呼び出された後です。) 3回めのdoLayoutはView#createChildrenから View#doLater-> View#initLayout -> doLayout となります。 私見ですが3回目のdoLayoutは本来一度doLayoutが呼び出されるとView.hasBeenLayedOutがtrueになり それ以降initLayoutからは呼び出されない様にView#doLayoutに定義されていますが、 Viewを継承するmx.core.ScrollView#doLayoutではsuper.doLayoutの呼び出しが無いのでhasBeenLayedOutが trueにならずに3回目のdoLayoutが呼び出されているというバグじゃないかなぁと思います。 といっても別にdoLayoutの呼び出しが多くても害はないですけどね。 普通はView以降のクラスを継承したユーザークラスを作り、レイアウトを整える実装を doLayoutに定義するということになると思います。。
|
kirarin | Åê¹ÆNo.9308 投稿日時: 2004-7-21 6:01 |
職人 居住地: 彩の国 投稿: 214
使用環境:
Windows7 IE 8 Flash CS4 Flash Player WIN 10,0,45,2 ------------------------- WindowsXP Professional SP3 IE7.0 Flash 8 Professional Flash Player 10.0.12.36 ------------------------- Windows2003 Sp1 IE6.0 SP1 Flash MX 2004 ... |
Re: Windowコンポーネントについて youichさん、とても詳しい説明をありがとうございましたm(__)m
doLayoutについて、youichさんが順に丁寧に説明してくださったおかげで3回出力の謎も解けました。 今回書いて頂いた内容は私にとってとても高度だったので、調べながら読んでいたらだいぶ時間がかかってしまいました(^^;)レスが遅れてすみません。 といってもクラスやイベントなどについて完全に理解できているわけではないのですが、それでも何となくはイメージ出来ました。 こういう内部の動きをきちんと理解できれば、スクリプトもすっきりするでしょうね。 少しFlashを使えるようにはなってきましたが、まだまだこれからも勉強する事が多いです。 アドバイスありがとうございましたm(__)m
|
NAKAOK | Åê¹ÆNo.12092 投稿日時: 2004-11-8 0:29 |
新米 居住地: 投稿: 10
使用環境:
WinXP, Flash Professinal 8, FCS MX 1.5 |
Re: Windowコンポーネントについて 初めまして、NAKAOKといいます。よろしくお願いします。
私もこれで悩んだうちの一人なのですが、追加で質問させて下さい。 私も、ここの皆さんの書き込みを拝見して ・Window内に配置したダイナミックテキストの変更 ・Window右上のCloseボタンで閉じる動作 については実現できたのですが、 ・Window内に配置したButtonコンポーネントのイベント取得 がどうしても上手くいきません。 kirarinさんも、当初の質問では 引用:
と、2つのButtonコンポーネントを配置されていたようですが、これについては解決されましたでしょうか? 具体的には、以下のようなコードで、Window内に配置したButtonのイベントが取得できません。 var initObj = {title:"確認 メッセージ", contentPath:"Msg", closeButton:true, validateNow:true}; _root.myWindow = mx.managers.PopUpManager.createPopUp(_root, mx.containers.Window, true, initObj); _root.myWindow.setSize(250, 200); _root.myWindow.content.msg_txt.text = "終了します"; // 以下は取得できる _root.windowListener0 = new Object(); _root.windowListener0.click = function(evt) { evt.target.deletePopUp(); }; _root.myWindow.addEventListener("click", _root.windowListener0); // 以下は取得できない _root.windowListener1 = new Object(); _root.windowListener1.click = function(evt) { trace("click"); }; _root.myWindow.content.yes_btn.addEventListener("click", _root.windowListener1); // 不思議なこと // 以下は "_level0.depthChild0.content.msg_txt" と出力される trace(_root.myWindow.content.msg_txt); // 以下は "終了します" と出力される trace(_root.myWindow.content.msg_txt.text); // 以下は "_level0.depthChild0.content.yes_btn" と出力される trace(_root.myWindow.content.yes_btn); // 以下は undefined とと出力される??? trace(_root.myWindow.content.yes_btn.label); yes_btn自体は参照できているのに、labelが参照できないということが不思議です。イベントが取得できない事と何か関係があるのでしょうか? よろしくお願いいたします。 |
kirarin | Åê¹ÆNo.12093 投稿日時: 2004-11-8 9:04 |
職人 居住地: 彩の国 投稿: 214
使用環境:
Windows7 IE 8 Flash CS4 Flash Player WIN 10,0,45,2 ------------------------- WindowsXP Professional SP3 IE7.0 Flash 8 Professional Flash Player 10.0.12.36 ------------------------- Windows2003 Sp1 IE6.0 SP1 Flash MX 2004 ... |
Re: Windowコンポーネントについて NAKAOKさん、こんにちは。
kirarinです。 私はButtonのClick時のイベントは、 on(click){ } で直接記述していました。 特に問題はありませんでした。 NAKAOKさんの書いていただいたスクリプトを 新規作成したFlashの1フレにコピーしてみました。 また、 ・ダイナミックテキスト1つ(msg_txt) ・Buttonコンポーネント2つ(yes_btn、no_btn) を配置した「Msg」シンボルを作成して、動作確認してみました。 私の方での出力結果は以下のとおりです。 <出力結果>-------------------- _level0.depthChild0.content.msg_txt 終了します _level0.depthChild0.content.yes_btn yes ------------------------------- 最後の1行、undefinedにはなりませんでした。 これ以外の記述は一切ありませんか?
|
NAKAOK | Åê¹ÆNo.13450 投稿日時: 2004-12-18 17:09 |
新米 居住地: 投稿: 10
使用環境:
WinXP, Flash Professinal 8, FCS MX 1.5 |
Re: Windowコンポーネントについて NAKAOKです。
kirarinさん、レスありがとうございました。 私が報告した現象についてですが、実際には ルートのタイムライン上に巨大なasファイルをincludeしていて その中のクラス定義で全てを記述している形になっており、 addEventListenerの引数にDelegate.create等を使用したり しているので、少々複雑なコードになっています。 ご質問をさせて頂くにあたってコードを単純化したのでですが、 私が何か別のところで間違いを犯していたのかもしれません。 本件については、ウィンドウの中身割り当てる ムービークリップ上のタイムラインにハンドラを記述することで 回避できました。 本当にありがとうございました。(__) またご質問させて頂く事もあるかと思いますが、 よろしくお願いいたします。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |