• 締切済み

コンボボックスの使い方

いつもお世話になります。 環境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