- 締切済み
ComboBoxの設定方法
フラッシュ初級者です。よろしくお願いします。 使っているフラッシュはMX2004です。 comboboxでシーンやラベルに飛べるようにしたいのですが、中々うまくいきません。 というかまったくわかりません…。 例えば「序盤」,「中盤」,「終盤」といシーン、 合計3つのシーンがあったとして、コンボボックスを開くと、この「序盤」,「中盤」,「終盤」が選択できて、選択するとそのシーンに飛ぶにはどのようなスクリプトをコンボボックスに入れておけばいいのでしょうか?(終盤を選択したときは「終盤」シーンの中のフレームラベル「hogehoge」に飛べるようにしたいです。) また、その際のコンボボックスのプロパティインスペクタの中のパラメーターの設定(data,editable,labels,rowcount)はどう設定すればいいのでしょうか? コンボボックスはシーン「終盤」に置くという設定です。 色々googleでもcomboboxについて検索してみたのですが、comboboxについて初級者用に解説しているページがみつからなかったので。 やさしく解説しているサイト等もしっていましたらご教授くださると大変うれしいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DPE
- ベストアンサー率85% (666/776)
おそらく、ComboBox を配置する位置の問題だと思います。 Flash は通常は、ステージ外にある絵やムービークリップなどは表示されません。 リストを展開した時に、リストの一部がステージ外にはみ出して欠けてしまわないように、ComboBox がステージの下の方に配置されている場合は、リストが上に伸びるように設計されているのではないでしょうか。 要するに、展開したリストがステージに収まりきらないのが原因と思われますので、 ・もう少し上の方に配置する ・rowCount を減らし、1ページあたりの表示項目数を少なくする このどちらかで解決できると思います。 ただし、rowCount が極端に少ないと、その分リストの大きさやスクロールバーも縮んで選択しにくくなってしまいますから、ご注意ください。 Stage.width と Stage.height というスクリプトを使うと分かりますが、「ムービープレビュー」では、ステージのサイズが、「ドキュメントプロパティ」で設定した大きさではなくなっています。 ComboBox コンポーネントでは、ステージのサイズを Stage.width や Stage.height で調べて、リストを上下のどちらに伸ばすかを判断しているのか、「ムービープレビュー」では下に伸びるのに、ブラウザやスタンドアロンプレイヤーで見ると上に伸びることもあります。
- DPE
- ベストアンサー率85% (666/776)
ComboBox に限らず、コンポーネントは ActionScript で制御しなければただの飾りにしかならないことも多いのですが、ヘルプを見ますと、コンポーネントを制御するには ActionScript の基本をある程度はマスターしていることが前提、となっています。 率直に言ってしまいますと”右も左も分からない初心者は手を出すな”という話なので、初級者用にコンポーネントの使い方を解説した書籍やサイトがなかなか見当たらないのだと思います。 そもそも、コンポーネントの使い方を解説した書籍自体が少ないです。あっても、手取り足取りは教えてくれないものが殆どです。 コンポーネントの正体は、編集可能なパラメータを持つ”ムービークリップ”です。 コンポーネントのインスタンスをステージに配置し、選択した状態で「プロパティ」パネルを見ますと、「プロパティ」と「パラメータ」という2つのタブが表示されるようになります。コンポーネントが持っている各種パラメータは、この「パラメータ」のタブで編集できます。 ComboBox コンポーネントが持っているパラメータの意味は、次の通りです。 ・data 各項目に設定する情報。 リストには表示されませんが、いろいろな使い方ができます。 ・editable ユーザーがリスト内の文字列を選択・入力等の操作をできるようにするかどうか。 true で編集可能、false で編集を禁止します。 ・labels リストに表示される、各項目の名前。 ・rowCount リストを展開(項目や▼ボタンをクリックした時)した時に、1ページに表示される項目の数。 項目の総数がこの数より多い場合はスクロールバーが付きます。 data と labels の設定の仕方は同じです。 「パラメータ」のタブで、data (または labels )と書かれている部分の右側をダブルクリックするか、クリックした後、右端に表示される虫メガネのアイコンをクリックしてみてください。「値」というパネルが開き、設定する情報や項目名を編集できます。 「+」で値を追加、「-」で削除できます。また、▼と▲のボタンで、項目を1つ上または下に移動することができます。 labels パラメータを編集している場合は、ここで設定した名前が、そのままリストに表示されます。今回の場合は「序盤」「中盤」「終盤」ですので、「+」ボタンで3つの項目を追加・設定してください。 data パラメータの使い方は様々ですが、今回は、移動先のフレームラベルを設定します。 例えば、「序盤」が選択された時 step1 、「中盤」→ step2 、「終盤」→ step3 に移動するものとしますと、data は、0番目(1番上)に step1 、続いて step2 、step3 と入力します。 editable は false 、rowCount は項目が3つしかないので3にします。 これで、パラメータの編集は完了です。 ---------------- ActionScript は、いつ、どのような時にスクリプトを実行するかを考えて組みます。 ボタンやムービークリップのインスタンスに設定したスクリプトは、ボタンやムービークリップに何か(イベント)が起きた時に実行されます。 何のイベントが起きた時にスクリプトを実行するのかを指定する文字列を、”イベントハンドラ”といいます。 イベントハンドラには様々なものがありますが、コンポーネントの場合は、ムービークリップやボタンにはない独特のイベントハンドラがあります。 ComboBox コンポーネントには、現在の項目と違う項目が選択された時に発生する、change というイベントハンドラがあります。 今回はこれを利用して、違う項目が選択された時にフレームを移動します。 Flash MX 2004 からは、コンポーネントのインスタンスに on アクションを設定して、イベント発生時の処理を設定できるようになりました。 ComboBox のインスタンスに、次のようなスクリプトを設定してみてください。 (↓各行頭に全角のスペースが入っています。コピーする場合は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) //違う項目が選択された場合の処理 on(change) { //現在、選択されている項目のdataを読み取る jump_frame = this.selectedItem.data; //選択されたフレームに移動 _root.gotoAndStop( jump_frame ); } selectedItem は、現在選択されている項目の data または label の内容を読み取るスクリプトです。 先のパラメータの編集で、data には移動先のフレームラベルを設定しました。従って、現在選択中の項目に設定されている data が、そのままフレームの移動先となります。 なお、シーン間の移動ですが。 シーンやフレームを移動する gotoAndPlay や gotoAndStop には2種類あります。 1つはシーンを指定できるもので、メインのタイムラインやステージに配置したボタンのインスタンス(ボタン同様に使うムービークリップは不可)でのみ、利用できます。 もう1つはムービークリップが持っているもので、こちらは、フレームの番号またはフレームラベルしか指定できません。 シーンとはメインのタイムラインにしかなく、ムービークリップにはないものです。ですから、後者のタイプの gotoAnd*** ではシーンの指定ができないのです。 しかし、メインのタイムラインやステージ上のボタン以外からでも、シーンを移動したい場合はあります。 このような時は、移動先のシーンのフレームにフレームラベルを付けておけば、後者の gotoAnd*** でも対応できます。 ところで、実は、change イベントには盲点があります。 change は、”今選択されているのと違う項目が選ばれた時”に発生するものです。 ComboBox では、デフォルトでは、最初の項目(0番目:今回は「序盤」の項目)が選択済みになっています。 例えば「終盤」から「序盤」へ移動したい時に、「序盤」が選択済みになっていると、改めて「序盤」を選んでも change イベントは発生せず、フレームの移動も実行されません。 簡単な回避策は、「終盤」に設置する ComboBox では、最初から「終盤」を選択済みにしておくことです。 コンポーネントはムービークリップを拡張したものですので、ムービークリップと同様に、load というイベントも利用できます。 load はムービークリップがステージに登場した時に1度だけ発生します。この点を利用して、最初に「終盤」の項目を選択済みとして定義します。 //「終盤」を選択済みとして設定 onClipEvent(load) { this.selectedIndex = 2; } selectedIndex には、現在選択されている項目の番号(インデックス)が入っています。これを書き換えますと、該当する項目を選択済みにすることができます。 data でも label でもそうですが、ComboBox の項目は必ず0番目から始まります。よって、3番目の項目である「終盤」は、2番ということになります。 長くなってすみませんでした。 不明な点がありましたら、補足してください。
補足
ご返答ありがとうございます。 追加なんですが、comboboxのはきちんとリンクできるようなったんですが、どうしてもわからないことがあるのです。 通常はcomboboxは下に伸びると思うのですが、3つcomboboxを配置したうちの一つがなぜか上にのびるのです。 思考錯誤してもよくわからず、何か解決策はあるのでしょうか?