• 締切済み

コンボボックスの使い方

いつもお世話になります。 環境FLASH CS3 AS2.0 アドビのサイトに次のサンプルがありました。 // コンボボックス用のイベントリスナーを作成します。 myComboBoxListener = new Object(); // チェンジイベントハンドラ myComboBoxListener.change = function(eventObj) { var eventSource = eventObj.target; var theSelectedItem = eventSource.selectedItem; var theSelectedItemLabel = theSelectedItem.label; msg = "選択されたアイテム: "+theSelectedItemLabel; myLabel.text = msg; }; // イベントリスナーの登録 myComboBox.addEventListener("change", myComboBoxListener); http://itpro.nikkeibp.co.jp/article/COLUMN/20060821/246028/zu5.html?ST=develop 上記のサイトのように、コンボボックスでイージングクラスを5種類選択でき、イージングメソッドを3種類選択できるようになっています。どのようにスクリプトを追加変更したらいいのかわかりませんので教えてください。

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 ・お礼より引用 > var myTween:Tween = new Tween(ball, "_y", eas, 15, 220, 2, true); > のeasがBounce.easeOutと指定された場合に > 「.」はどの箇所で「.」が必要だと決まって > いるのでしょうか? この文章からは, いったい何がわからないのかが読み取れませんが。。。 「.」が必要だと決めたのは Adobe(AS2 だから Macromedia 時代) です。 というか, イージングに Backクラス,Bounceクラス,Elasticクラス,Regularクラス,Strongクラス,Noneクラス という6つのクラスを作って, それらクラスのメソッドとして, easeInメソッド,easeOutメソッド,easeInOutメソッド という3つのメソッドを入れよう。 と決めたのが Adobe(Macromedia時代) です。 その「クラス」と「メソッド」の狭間に「.」が必要なのです。 と書いてみましたが, やはり何がわからないのかがわかりませんね。。。 このイージングに限らず, 普通のスクリプトの構文は  オブジェクト.メソッド または  オブジェクト.プロパティ になっているでしょう? 例えば _root.gotoAndStop(4); これ場合は「_root」がオブジェクトです。 「gotoAndStop」がそのオブジェクトに対するgotoAndStopメソッドです。 その後の「()」がそのメソッドを実行命令です。 その「()」の中の「4」がそのメソッドを実行させるときの引数です。 ball._y この場合は「ball」がオブジェクトです。 「_y」がそのオブジェクトのプロパティ(y座標プロパティ)です。 これらの例のように オブジェクトにはあるクラスのインスタンスが入る場合が多いです。 (_root は MovieClipクラスのインスタンスの一種。) しかしオブジェクトがクラス自体になることもあるのです。 イージングのクラス群は Tweenとセットでないと動作しないので確認しにくいです。 イージングのクラス群によく似たクラスに Math クラス(数学用クラス)がありますから それで出力検証実験をしてみますか。 よろしければ ActionScript 2.0 設定の新規ドキュメントを作成し 次のスクリプトを フレーム1 に書き, 「制御」→「ムービープレビュー」し,出力パネルを確認してみてください。 //Mathクラスを出力 trace(Math); →出力結果:[object Object] になると思います。 Mathクラスはオブジェクトなんです。 では次の場合はどうなるでしょうか。 //Math.randomを出力 trace(Math.random); →出力結果:[type Function] Math.random という Function(メソッド) が存在するということになります。 では次の場合はどうなるでしょうか。 //Mathクラスのrandomメソッドを実行した結果を出力 trace(Math.random()); →出力結果:0.??????????????? になると思います。 「?」はそのときどきによって変わる数字です。 Mathクラス(オブジェクト)には random という「0以上1未満の乱数を返すメソッド」があるわけです。 Math.random() は, Mathクラスのrandomメソッドを実行せよ。 という意味ですから Math と random の間には「.」が必要になります。 「.」の位置を1つ左にずらした Mat.hrandom() など無事に動作しません。 「.」を削除した Mathrandom() でも同じくです。 「そんなメソッド無いよ!」という意味で「undefined」が返ってきます。 それでは次の場合はどうなるでしょうか。 //Mathクラスのrandomメソッドを変数に代入 var my_method:Function = Math.random; //そのメソッドを実行した結果を出力 trace(my_method()); →出力結果:0.??????????????? Math.random (Mathクラスのrandomメソッド)を, 変数に格納することができるわけです。 これが #1 で使った方法に近いものです。 さらに #1 で使った方法に近づけてみます。 //Mathクラスを変数に代入 var my_class:Object = Math; //「random」という文字列を変数に代入 var my_method:String = "random"; //そのメソッドを実行した結果を出力 trace(my_class[my_method]()); →出力結果:0.??????????????? クラスとメソッドとをバラバラに設定(コンボボックスなどから取得)して それらを合体させる方法です。 何がわからないのかが読み取れませんが 以上のような感じでよろしいでしょうか?

x_izumin
質問者

お礼

舌足らずで申し訳ありません。 >trace(my_class[my_method]()); 合体が0???????????????でなく0.???????????????であるという疑問でした。 >その「クラス」と「メソッド」の狭間に「.」が必要なのです。 だから0.???????????????になるわけですね。 丁寧に具体例を示しながらありがとうございました。

x_izumin
質問者

補足

マトはずれなお礼をしていまいました。すみません。

全文を見る
すると、全ての回答が全文表示されます。
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

その本家本元のページはご覧になりましたよね?    ↓↓↓ 「第21回 Tweenクラスを使えばインスタンスを簡単に動かせる - Flash 8 入門講座:ITpro」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060821/246028/ そのページの最初のスクリプトは実際に実行してみましたか?    ↓↓↓ ~~~ 引用 ~~~ //Tweenクラスを使用できるようにインポート import mx.transitions.Tween; import mx.transitions.easing.*; //インスタンス「ball」の動きをTweenクラスを使って制御 var myTween:Tween = new Tween( ball, "_y", Bounce.easeOut, 15, 220, 2, true ); ~~~~~~~~~ ステージ上に「ball」というインスタンス名を付けたムービークリップを用意し, 上記スクリプトをフレームにコピペすれば「ball」が勝手に動くと思います。 上記スクリプトを 次のように発展(変形)させれば 何をすれば良いのかがある程度見えてくると思うのですが。    ↓↓↓ ~~~ 発展 ~~~ //Tweenクラスを使用できるようにインポート import mx.transitions.Tween; import mx.transitions.easing.*; //関数dropBallの定義(引数 メソッド) function dropBall(eas:Function):Void{ //インスタンス「ball」の動きをTweenクラスを使って制御 var myTween:Tween = new Tween( ball, "_y", eas, 15, 220, 2, true ); } //関数dropBallの実行(引数 Bounce.easeOut) dropBall(Bounce.easeOut); ~~~~~~~~~ つまり, 関数dropBall を実行させるときの eas の部分を コンボボックスによって変えてやれば良いということになります。 というわけで,ステージ上に 「ball」というインスタンス名のムービークリップと 「class_cb」というインスタンス名のコンボボックスと 「method_cb」というインスタンス名のコンボボックスと 「btn」というインスタンス名のボタンを配置した場合の フレームに書くスクリプト例です。    ↓↓↓ ~~~ 回答 ~~~ //Tweenクラスを使用できるようにインポート import mx.transitions.Tween; import mx.transitions.easing.*; //関数dropBallの定義(引数 メソッド) function dropBall(eas:Function):Void { //インスタンス「ball」の動きをTweenクラスを使って制御 var myTween:Tween = new Tween(ball, "_y", eas, 15, 220, 2, true); } //コンボボックス「class_cb」の設定 class_cb.addItem("Back", Back); class_cb.addItem("Bounce", Bounce); class_cb.addItem("Elastic", Elastic); class_cb.addItem("Regular", Regular); class_cb.addItem("Strong", Strong); class_cb.addItem("None", None); //コンボボックス「method_cb」の設定 method_cb.addItem("easeIn"); method_cb.addItem("easeOut"); method_cb.addItem("easeInOut"); //ボタン「btn」クリック時の動作 btn.onRelease = function():Void { //選択されたクラスの取得 var my_class:Object = class_cb.selectedItem.data; //選択されたメソッド名(文字列)の取得 var my_method:String = method_cb.selectedItem.label; //関数dropBallの実行(引数 イージングメソッド) dropBall(my_class[my_method]); }; ~~~~~~~~~ ※Flash MX 2004 以上で使用可   Flash Player 7 以上で動作   ActionScript 2.0 ご質問より引用 > アドビのサイトに次のサンプルがありました。 そのサンプルのスクリプトは コンボボックスの選択項目が閲覧者によってチェンジされたときに何かのイベントを起こすスクリプトですから 全体的には(大枠では)この場合あまり関係がありません。 そのスクリプトの中で 選択されたアイテムの取得のしかただけは関係があります。 ComboBox.addItem のシンタックス(記述規則)は次のようになっています。 ComboBoxインスタンス.addItem(label[,data]) ComboBoxインスタンス.addItem({label:label[,data:data]}) ComboBoxインスタンス.addItem(obj); 上記スクリプトでは,この3つの書き方うちの1つ目の書き方を使っています。 また, 上記スクリプトを見てもらえばわかると思いますが, ComboBoxインスタンス.selectedItem.label で選択されたアイテムのラベル(表示文字列)が取得でき, ComboBoxインスタンス.selectedItem.data で選択されたアイテムの設定データが取得できます。 それと最後の1行 dropBall(my_class[my_method]); この引数である my_class[my_method] の部分がわからない場合は Google などで「配列アクセス演算子」と検索してみてください。  

x_izumin
質問者

お礼

いつもありがとうございます。 var myTween:Tween = new Tween(ball, "_y", eas, 15, 220, 2, true); のeasがBounce.easeOutと指定された場合に「.」はどの箇所で「.」が必要だと決まって いるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コンボボックスで困ってます。

    AS3.0でflashを作っている初心者です。 コンボボックスで、画面に表示される画像の切り替えを行いたいと思ってます。 画像をムービークリップにして、そのムービークリップのフレームとコンボボックスのデータを対応させ、表示を切り替えたいと考え、様々なサイトを参考にして、以下のように書いてみたのですが、うまくいきません。ずっとフレーム1の画像が表示されたままです。 my_cb.prompt = "選択"; my_cb.addItem( { label: "ピンク", data:1 } ); my_cb.addItem( { label: "赤", data:2 } ); my_cb.addItem( { label: "黒", data:3 } ); my_cb.addItem( { label: "青", data:4 } ); addChild(my_cb); my_cb.addEventListener(Event.CHANGE, changeFunction); function changeFunction(e:Event):void { mc.gotoAndStop(my_cb.selectedItem.data); } ムービークリップはそれぞれのフレームにstop();と書いてます。 書かないとアニメーションしてしまうので、書いているのですが、これがいけないのでしょうか…? どなたかご教授いただけないでしょうか。

    • ベストアンサー
    • Flash
  • コンボボックスの変更に応じてテキストボックスの有効を切り替える(ExcelVBA2007)

    お世話になります。 Excel VBA 2007で質問です。 今、  Label1 ComboBox1 TextBox1  Label2 ComboBox2 TextBox2 ・・・  Label100 ComboBox100 TextBox100 のようなフォームがあるとします。 ComboBox1~100は「Any」「is」「is not」のいずれかの値が取れ、初期値はAnyとします。 TextBox の Enabled プロパティの初期値は False とします。 やりたいことは、 ComboBox が「Any」でない場合(is または is not のいずれかの場合)にのみその右隣の TextBox の Enabled プロパティを True にしたいのです。 いま、ComboBox30 を Any から is に切り替えたとします。 すると、TextBox30.Enabled を False から True にしたいのです。 ここで、ComboBox30 を is から is not に切り替えたとします。 TextBox30.Enabled は True のままです。 ここで、ComboBox30 を is not から Any に切り替えたとします。 すると、TextBox30.Enabled を True から False にしたいのです。 ComboBox のイベントハンドラで Sub ComboBox30_Change ()  If ComboBox30.Value = "Any" Then   TextBox30.Enabled = "False"  Else   TextBox30.Enabled = "True"  End If End Sub のように書けばいいことは分かっているのですが、その場合は数字だけ変えたイベントハンドラを100個書かなければなりません。 このイベントハンドラを1個にすることはできるでしょうか。 (コンボボックス100個のうちどれかが変更されたら、変更されたコンボボックスの番号を知りながら呼び出されるハンドラ) 次善の策として、 Sub ComboBox30_Change ()  userSubroutine End Sub のように書くこともできるかと思いますが、この場合、どのコンボボックスが変更されたか(どのイベントハンドラが起動されたか)を知って、userSubroutine に渡さなければなりません。 よろしくお願いします!

  • コンボボックスについて

    お世話になります。 時間選択で「時」のコンボボックスをFuncutionで作成して いますが、 下記のような場合、もう少しスッキリした書き方は 出来ないでしょうか?また、5分間隔で「分」のコンボ ボックスも作成したいです。 ご教授下さい。 //時間(hh)を選択するコンボの作成 Function cmbTime(){   var objCmb = new Array();    objCmb = {     "0":"",     "1":"00",     "2":"01",     "3":"02",     "4":"03",     "5":"04",     "6":"05",      ・      ・      ・     "24":"23";}   return objCmb; }  

  • ユーザーフォーム上にあるコンボボックスの重複選択をできなくするには?

    ユーザーフォーム上に10個のコンボボックスがあり それぞれ名前をcb1からcb10とします。 これらのコンボボックスには同じリストを取得して 表示していますが、選択するときには重複させないように したいと思っています。 例を挙げると、 リストの値が”東京”、”大阪”、”名古屋”として、 cb1で”東京”を選択している場合は、残りのcb2~cb10では ”東京”を選択できないように、もしくは選択したときに ”すでに選択済みです”みたいなメッセージを表示させて キャンセル状態に戻す、みたいにしたいのですが スマートな書き方がわかりません。 ※力業でそれぞれのコンボボックスのチェンジイベントで 他のコンボボックスの値を見に行って、重複があれば メッセージを表示させるという方法ならわかるのですが 実際のコンボボックスの数が50近くあるためできれば 避けたいと思っています。 達人の皆様、どうぞ宜しくお願いします。

  • コンボボックスでのイベントについて

    VB6です。 コンボボックスに予めいくつかのデータを設定済みで、 その設定されているデータをリストから選択した時のイベントはどのようなイベントでしょうか。 試してみましたが、Changeイベントではなさそうです。 このイベントがぜひとも必要なのです。

  • mysqlからのコンボボックスについて教えてください

    はじめまして。 mysql+php初心者の者ですが、 ご教授をよろしくお願いいたします。 [table 1] id  種類 ---------- 1 野菜 2  果物 3  麺 [table 2] id   key   名前 ---------------------- 1  1 にんじん 2   1 たまねぎ 3   1   ほうれん草 4  2 りんご 5   2   バナナ 6  3 うどん 7   3   ラーメン [table 1]のid と、[table 2]のkeyが 対応するように、連動したコンボボックスを作りたいと思って頑張っています。 コンボボックス1には、[table 1]の、種類が入り コンボボックス2には、[table 1]の種類に連動して、[table 2]の名前が選択できるように したいと思っています。 たとえば、コンボボックス1で「果物」を選択した場合、 コンボボックス2では、「りんご」「バナナ」がコンボボックスに 表示されて選べるようになるようにするです。 単純に、mysqlからセレクトフォームに表示することはできましたが、 連動がどうやればいいのか、色々調べましたが 力不足で分かりませんでした。 コンボボックスを連動させるために、[table2]に「key」のフィールドを加えたので、 改良しようと思っております。 ご教授をよろしくお願いいたします。 環境 ------- WindowsXP mysql4.0 php4.2 Apache1.3

    • ベストアンサー
    • PHP
  • コンボボックスの値が変更されたらそのコンボボックスに表示されたURLを開きたい

    データ型がハイパーリンクの文字列が入力されたテーブルをコンボボックスに表示させています。(添付画像参考) 希望は、 プルダウンでURLを選択したと同時にリンク先へ飛びたいです。 現在は、 プルダウンでURLを選択→コンボボックスをクリック でリンク先に飛んでいます。 多分コンボボックスのChangeイベントだと思うのですが どうすればいいのでしょうか? アドバイスよろしくお願いします。

  • コンボボックスの絞込みについて

    こんにちは アクセス2000で発注書を作っています ど素人です。。 コンボボックスの絞りこみについて教えてください。 現在5つのコンボで絞込みをしています コンボ1仕入先(メインフォーム) コンボ2種類1(サブフォーム) コンボ3種類2(サブフォーム) コンボ4商品名(サブフォーム) コンボ5詳細(サブフォーム) です。 コンボ1は一度選択すると、変更はありません。 コンボ5で選択決定した後、コンボ2、コンボ3、コンボ4は空白に、 コンボ5は全表示に設定しているのですが それだとコンボ1で選択した仕入先以外の商品も入ってしまうので コンボ5に、コンボ1で仕入れた商品のみを全表示したい場合は どうしたらいいですか? 説明下手で申し訳ありませんが どなかたご教授の程よろしくお願いいたします

  • シート上のコンボボックスの使い方

    シート上のコンボボックスの使い方 現在作っている物があるのですが、色々と調べてはみるものの解決出来なくて困っています。 ☆やりたいこと シート1 コンボボックスA コンボボックスB コンボボックスC 一覧表(A1~A16)の枠だけが書かれているもの コンボボックスA・・・青森 秋田 岩手 コンボボックスB・・・100 200 300 コンボボックスC・・・北 東 西 南 シート2 コンボボックスAとBとCの選択されたものによって選ばれる一覧表(例A1~E16)のデータ ☆シート1にてコンボボックスを3種類選択した時に、シート1枠だけの一覧表にシート2のデータが表示される! ということがやりたいです。 説明がアバウトすぎて申し訳ありませんが、初心者なりに色々やった結果が惨敗に終わっている状態です。 皆様のお力を貸していただきたく思います。

  • エクセルVBAのコンボボックスについて

    エクセルVBAでActiveXコントロールのコンボボックスを配置して以下の プログラムを記述しているのですが、 コンボボックスでAを選択した後に、もう一度Aを選択したときに イベントが発生しません。 Private Sub ComboBox1_Change()ならイベントが発生しないのは 分かるのですが、Clickの場合は、選択された値が変わらなくても イベントが発生すると思ってたのですが。 VB6では問題なく発生しています。 ちなみにセルの入力規則ではなくてコンボボックスで実現したいです。 Private Sub ComboBox1_Click() 'ここに処理を記述 End Sub

このQ&Aのポイント
  • プリント中にエラーが発生したときの対処法や原因を解説します。
  • キヤノン製品のプリント中に表示されるエラーメッセージの意味と解決方法について紹介します。
  • プリンターがエラーを示す場合、トラブルの解決方法や修理の手順をご紹介します。
回答を見る