• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AS2でキーによる複数の音楽制御について)

AS2でキーによる複数の音楽制御について

このQ&Aのポイント
  • AS2、CS5.5での環境で、キーによる複数の音楽の再生・停止の制御プログラムを作る方法について教えてください。
  • 同時に複数の音楽が流れることが可能で、複数の音楽が流れている中で1つだけ止める等の音楽それぞれを個別に制御もできるものが希望です。
  • Aキーを押せばsoundAが流れる、Bキーを押せばsoundBが流れ、1キーもしくは2キーのどちらか押されたらsoundAもsoundBも停止するような制御をしたいです。さらに、同じ要領でsoundC、DはC、Dキーで再生し、3、4キーで停止、EF、GHの8種類の音楽を制御したいです。

質問者が選んだベストアンサー

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

> Aキーを押せばsoundA(リンゲージ名を付けた音楽ファイル)が流れる、 > Bキーを押せばsoundBが流れ、 ??? スクリプトと識別子がずれていますが これは > Aキーを押せばsound0(リンゲージ名を付けた音楽ファイル)が流れる、 > Bキーを押せばsound1が流れ、 と解釈変更をしてよろしいのですよね? (以下も同様に soundC→sound2,soundD→sound3,…) > 1キーもしくは2キーのどちらか押されたらsoundAもsoundBも停止 > というようにしたいのですが、可能でしょうか。 ↓解釈変更↓ > 1キーもしくは2キーのどちらか押されたらsound0もsound1も停止 > というようにしたいのですが、可能でしょうか。 それでしたら普通に,単純に(超基本的に) if文 で次のような内容のスクリプトを書けば良いだけだと思いますよ。。。 if(キーが1または2のとき){  sound0とsound1を停止; }else if(キーが3または4のとき){  sound2とsound3を停止; }else if(キーが5または6のとき){  sound4とsound5を停止; }else if(キーが7または8のとき){  sound6とsound7を停止; } ↑まずはこのように基本で考えるのが第一です。 (まずはこれができて,もし余力があれば簡素化や効率化などを考えれば良いのです。) あと上の内容のスクリプトを見てもらっても, ご質問を読みなおしてもらってもわかると思いますが, キー1,2 → sound0,1 キー3,4 → sound2,3 キー5,6 → sound4,5 キー7,8 → sound6,7 という感じで キーと音とが 1 ずつずれていますよ。 これは,ずれていることが正解だとして 以下の回答を続けます。 本来は まず上で書いたif文の内容を考えて行くのが第一ですが 上のように長い(?) if文 にするのではなくて これも前回回答したスクリプトのように 少し簡素化したスクリプトを考えることにします。 その場合のスクリプト例です↓。 //------------------------------------------- //この階層を変数化 var me:MovieClip = this; //変数 i を 0~7 の間で 1 ずつ加算しながらループ for (var i:Number = 0; i<=7; i++) { //Soundオブジェクト「sound_obj0」~「sound_obj7」を作成 me["sound_obj"+i] = new Sound(); //各Soundオブジェクトに各音を割り当てる me["sound_obj"+i].attachSound("sound"+i); //各音の再生フラグ「sound_flg0」~「sound_flg7」を用意 me["sound_flg"+i] = false; } //キーを監視させるオブジェクトを作成 var key_obj:Object = new Object(); //キーを押したときに実行する関数の定義 key_obj.onKeyDown = function():Void { // //押されたキーコードを保存 var key_num:Number = Key.getCode(); // //押されたキーコードが65~72(キーがA~H)の間であれば if (key_num>=65 && key_num<=72) { //さらにそのキーの音に対応するフラグが false であれば if (!me["sound_flg"+(key_num-65)]) { trace("sound_obj"+(key_num-65)); //そのキーに対応する音を再生 me["sound_obj"+(key_num-65)].start(0,100); //その音に対応するフラグを true にする me["sound_flg"+(key_num-65)] = true; } //---↓★以下の数字を変更★↓--- //押されたキーコードが97~104(キーが1~8)の間であれば } else if (key_num>=97 && key_num<=104) { trace("sound_obj"+(key_num-97)); //そのキーに対応する音を停止 me["sound_obj"+(key_num-97)].stop("sound"+(key_num-97)); //その音に対応するフラグを false にする me["sound_flg"+(key_num-97)] = false; // //---↓★以下のif文を付け足し★↓--- //もしキーコードが奇数であれば if (key_num%2) { //そのキーに対応する音の次の音を停止 me["sound_obj"+(key_num-96)].stop("sound"+(key_num-96)); //その音に対応するフラグを false にする me["sound_flg"+(key_num-96)] = false; //もしキーコードが偶数であれば } else { //そのキーに対応する音の前の音を停止 me["sound_obj"+(key_num-98)].stop("sound"+(key_num-98)); //その音に対応するフラグを false にする me["sound_flg"+(key_num-98)] = false; } } }; //key_obj を Key のリスナーとして登録 Key.addListener(key_obj); //------------------------------------------- 上で付け加えたスクリプトに //もしキーコードが奇数であれば if (key_num%2) {…} という部分がありますが ここで使っている % を「剰余演算子」と言います。 (% では Google や ヘルプ で検索できないので日本語名を書きました。) 「key_num%2」は 「変数 key_num を 2 で割った余り」という意味です。 もし key_num が 97 だった場合 key_num%2 は 1 になります。 1 は true と等価ですから if (key_num%2) {…} の … の部分は実行されます。 (それに続く else の部分は実行されません。) key_num%2 が 1 のとき ⇔ key_numが奇数のとき key_num%2 が 0 のとき ⇔ key_numが偶数のとき という関係です。

tm2an
質問者

お礼

お返事が遅くなって申し訳ありません。 そして >スクリプトと識別子がずれていますが... 大変失礼しました!説明下手以前の問題ですよね;; 解釈していただいた通りです。 剰余演算子についてはおっしゃっていた通り%はGoogleやヘルプで検索できなかったので、 今回説明していただけて本当によく理解できました。 いつもいつもありがとうございます! 最近やっと全くわからないスクリプトが出てきても、見ればこんなことしてるのだと理解できるようになってきましたので、少しだけですが進歩を実感しております。 これもBlurFiltanさんの丁寧な解説のおかげです! 今回もありがとうございました!

関連するQ&A

専門家に質問してみよう