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

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

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

頻繁な質問で申し訳ありません。 AS2、CS5.5での環境で、キーによる複数の音楽の再生・停止の制御プログラムを作ろうとしています。 同時に複数の音楽が流れることが可能で、複数の音楽が流れている中で1つだけ止める等の音楽それぞれを個別に制御もできるものが希望です。 先日に //------------------------------------------- //この階層を変数化 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; } //押されたキーコードが96~103(キーが1~7)の間であれば } else if (key_num>=96 && key_num<=103) { trace("sound_obj"+(key_num-96)); //そのキーに対応する音を停止 me["sound_obj"+(key_num-96)].stop("sound"+(key_num-96)); //その音に対応するフラグを false にする me["sound_flg"+(key_num-96)] = false; } }; //key_obj を Key のリスナーとして登録 Key.addListener(key_obj); //------------------------------------------- このようなスクリプトを教えていただきました。 これをさらに、Aキーを押せばsoundA(リンゲージ名を付けた音楽ファイル)が流れる、Bキーを押せばsoundBが流れ、1キーもしくは2キーのどちらか押されたらsoundAもsoundBも停止 というようにしたいのですが、可能でしょうか。 またこれを上記と同じ要領で、soundC、DはC、Dキーで再生し3、4キーで停止...EF、GHの8種類制御したいです。 説明が下手ですみませんが、どなたか教えてください。 よろしくお願いいたします。

  • tm2an
  • お礼率75% (3/4)
  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • AS2でキーによる音楽制御について

    AS勉強中で初心者の者です。 今回キーによる音楽制御を勉強しておりまして、不明点がありますので教えてください。 環境はwindows、Flash5.5、AS2です。 内容はAキーを押すと音楽がループ再生し、Bキーを押すと音楽が停止するもの。また他のキーを使って複数の音楽を同時再生、そのうちの1つの音楽のみを停止させる等、複数の音楽をそれぞれ制御できるものを制作したいです。 現在ライブラリにボタン1とボタン2、リンゲージ設定されたsoundAを用意し、シーン1にボタン1を配置し、ボタン1に on (release) { soundObj.start(0, 100); } を書きました。 同じようにシーン1にボタン2を配置し、ボタン2に on (release) { soundObj.stop("soundA"); } を書きました。 そして、シーン1のタイムライン1フレーム目に soundObj = new Sound(); soundObj.attachSound("soundA"); を書きました。 これではステージ上のボタン1、2をマウスクリックすることで音楽を制御することになります。 これをキーで制御したいのですが、どのようにすればいいのでしょうか? 自分なりに模索したのはon (release) をonClipEvent(onKeyDown)にすればいいのか(←これだとAキー等の指定はどうすればいいか?)、on (release) ではなくKey.isDown(65);を使うのか(これは動かなかったので、何かた足りないのか?)です。 後はそもそもキーで制御する際はボタンではなく、ムービークリップの方がいいのでしょうか? 説明が下手で至らない点もあるとは思いますが、どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • AS2.0 キーを押して~秒後に実行

    AS2.0 キーを押して~秒後に実行 キーを押す度に、値(isVolume)が1ずつ増加し キーを押しっぱなしにして~秒経過すると増加を続ける、 というスクリプトを書きました。 しかし、この方法はあまりよろしくない気がします。 より短く簡潔に題名の機能を実現するにはどうすればよいか、 アドバイスをよろしくお願いいたします。 //1フレーム目 //初期値 var isVolume = 0; var key_check =0; var num = 36; onEnterFrame = function(){ //キーが押され、key_checkの値が0のとき if (Key.isDown(32) && key_check == 0) { //key_check、isVolumeの値の増加開始 key_check +=1; isVolume +=1; //キーが押され、key_checkの値が1以上のとき } else if(Key.isDown(32) && key_check >= 1) { //isVolumeの増加を停止しkey_checkの増加を続ける key_check +=1; //キーが押され、key_checkの値がnum以上になったとき if(Key.isDown(32) && key_check >= num) { //isVolumeの値の増加開始 isVolume +=1; } } else { //キーを押していないときkey_checkの値は0 key_check =0; } } こちらで動作が確認が出来ます。 http://okirakupage.warabuki.net/mainmenu1.swf

    • ベストアンサー
    • Flash
  • ファンクションキー制御?

    こんにちわです。 タイトル通りなのですが、 JSでは、 function kdown(e) {var msg =""; var flg = 1; switch(window.event.srcElement.tagName){ case "INPUT" :if(event.srcElement.type != "text" && event.srcElement.type != "password" && event.keyCode!=9 && event.keyCode!=16 && event.keyCode!=32){return false;}else{flg=0;}break; case "TEXTAREA" :flg = 0;break; case "SELECT" :flg = 0;break; case "A" :flg = 2;break; } switch(event.keyCode){ case 8 :msg = "BS";break; case 78 :if(event.ctrlKey){msg = "Ctrl+N";}break; case 82 :if(event.ctrlKey){msg = "Ctrl+R";}break; case 116 :msg = "F5";break; case 122 :msg = "F11";break; } if(event.altKey){msg = "Alt";} if (flg == 0 ){switch(event.keyCode){case 8 :msg = "";break;case 13 :msg = "";break;}} else if (flg == 2 && event.keyCode==13)msg = ""; if(msg != ""){event.keyCode = 0;return false;}else{return true;} } document.onkeydown = kdown; こんな感じに制御するのを、 アクションスクリプトで制御出来ますか? HTMLにこのJS埋め込んでも、FLASHの所クリックして、 各キー押すと意味なくなってしまうので・・ F5やF11など使用されたくないのですが・・・ 入れ替えなどでも良いのですが。。。 宜しくお願いします。

  • ActionScriptで配列をクリアする方法を教えてください。

    ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS初心者です。フレームループするメニューを作りたいのですが・・・

    ■環境 WindowsXP/FLASH 8pro/AS2.0 ■実現したいフラッシュのあるサイト http://www.first-jp.com/ このサイトの上部にあるスクロールしているFLASHです。 かなりの初心者なのですが、本を参考にして作っています。 まだまだ完成にはほど遠いのですが、現段階でこのような状態です。 http://dragstarnavi.web.fc2.com/navi/navi.html ■構造 メインのタイムライン1フレーム目に下記のASを記述。 メインのタイムライン1フレーム目にボタンを設置(MC可、左は「left-botton」右は「right-botton」) ■メインタイムラインに記載しているAS var obj_array:Array = new Array(); //配列の生成 var center:Number = Stage.width/2; //ステージ中心X座標 var menu_num:Number = 4; //メニュー数 var maxlength:Number = 800*menu_num; //メニュー列の最大幅 var friction:Number = -0.02; //マウス移動時の摩擦値 //XMLオブジェクトの生成と外部XMLの読み込み var obj_xml:XML = new XML(); //XMLオブジェクトの生成 obj_xml.onLoad = start_me; //ロードアクション(コールバックを定義) obj_xml.ignoreWhite = true; //XMLファイルの空白、改行などを無視 obj_xml.load("scrollslide.xml"); //外部XMLファイルを読み込む //XMLのロード成功可否を判断 function start_me(success:Boolean):Void { if (success == true) { //読み込み成功 //サムネイルインスタンスの生成と設定 for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = _root.attachMovie("menu", menu_str, i); //インスタンスを設定 obj_array[i].num = i; //インスタンスを配列で管理 obj_array[i]._x = 800*(i-1); obj_array[i]._y = 0; //XMLからJPG名を読み込む var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; //XMLからURLを読み込む var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); //外部JPGロード obj_array[i].onEnterFrame = scrollphoto_me; //イベントアクション obj_array[i].onPress = press_me; //イベントアクション obj_array[i].onRollOver = roll_me; //イベントアクション obj_array[i].onRollOut = rollout_me; //イベントアクション obj_array[i].onRelease = release_me; //イベントアクション obj_array[i].link = link_str; } } else { seltext = "xml read error"; //エラー } } function release_me():Void { trace(this.link); getURL(this.link, "_parent"); //同ウインドウ内でURLを読み込む } //サムネイルインスタンスのフレームループ function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; //マウスの移動量 var vx:Number = this._x+speed; if (vx<=-800) { //ステージ左に消えたら vx += maxlength; //サムネイルの最後列の後ろへ移動 } else if (vx>=Stage.width+1) { //ステージ右に消えたら vx -= maxlength; //サムネイル最前列の前へ移動 } this._x = vx; updateAfterEvent(); } //サムネイルインスタンスのマウスロールオーバーアクション function roll_me():Void { this._alpha = 80; } //サムネイルインスタンスのマウスロールアウトアクション function rollout_me():Void { this._alpha = 100; } stop(); ■読み込んでいるXML <?xml version="1.0" encoding="utf-8"?> <jpeg> <jpegURL>images/image1.jpg</jpegURL> <link>http://yahoo.co.jp/1</link> <jpegURL>images/image2.jpg</jpegURL> <link>http://yahoo.co.jp/2</link> <jpegURL>images/image3.jpg</jpegURL> <link>http://yahoo.co.jp/3</link> <jpegURL>images/image4.jpg</jpegURL> <link>http://yahoo.co.jp/4</link> </jpeg> ■先人の皆様にご教授して頂きたい箇所 1.ループの変更   希望サイトのように、左から右に一定の速度で流れるようにしたい。   オンマウスにて完全にストップ。マウスアウトにてストップを解除。 2.ボタンの設置   メインタイムラインに新規フレームを作って左右のボタン  (left-botton right-botton)を設置し、MCに変換したのですが   早速問題で、読み込まれた外部JPGの背後になってしまっています。。   これを最前面に持ってきたいのです。   読み込む順番が問題なのでしょうか? 3.ボタンのアクション設定   左ボタン(left-botton)にて、左方向に加速。   右ボタン(right-botton)にて、右方向に加速。 何を無謀なチャレンジと思われるでしょうが、 宜しければご教授頂ければ幸いです。

  • Delphi6 ループ中にキー入力

    Delphi 6 です。 for next などのループの中で、stringgridのセルをEnterキーで選択させたい時、選択されるまで(キーが押されるまで)処理を進めたくない方法は、どうするんでしょうか? flg:=false; for i:=1 to 100 do begin ~諸々の処理で flg:=true; ~ if flg=true then x[i]:= stringgridの選択されたRow番号(はじめからフォーカスされている番号でなく) ~諸々の処理で flg:=false; ~ end;

  • マウスの基準点について

    www.i-tv.in/test/shop_menu.swf 上記のものスクリプトの参考書を見ながら作りました。マウスが摩擦をおく基準が上の方になっています。 これを中央にもっていきたいと思いましたが、このような単純なことは調べても出てきません。どなかた教えて頂ければ幸いです。宜しくお願いします。 function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; _root.attachMovie("menu",menu_str,i); obj_array[i] = eval(menu_str); obj_array[i].num = i; obj_array[i].mctext = i; obj_array[i]._y = 125*(i-1); obj_array[i]._x = 10; obj_array[i]._alpha = 40; var jpg_str:String = obj_xml.firstChild.childNodes[i-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; } } else { seltext = "xml read error"; } }

    • ベストアンサー
    • Flash
  • setTimeoutでの制御に関しまして

    初めて質問をさせて頂きます。よろしくお願い致します。 「mc_Image1」、「mc_Image2」、「mc_Image3」という 各ムービークリップをストップボタンを押した際に時間差で停止させたいのですが 「mc_Image2」、「mc_Image3」がstopがかからない状態が稀に生じたりします。 (ムービークリップは全て、1フレーム目にstop();、10フレーム目にgotoAndPlay(2);と設定) 少し端折っておりますが、スクリプトを記載いたします。 ---------------------------- //何回ルーレットしたかカウントする var count:Number = 0; //スタート/ストップボタンが押された押されていないかのフラグ var flg_StartStop:Boolean = false; // mc_Image停止待機速度変数(ミリ秒) var hensu1 = 2000; var hensu2 = 3000; //スタート/ストップボタンを押した時に呼び出される関数 btn_StartStop.onPress = function() { if(flg_StartStop) { //選ばれたフレームに飛ぶ mc_Image1.gotoAndStop(parseInt(one)+1); // setInterval で hensu(ミリ秒)後に_root.gotoAndStop(); を実行 stopID = setInterval(function () { _root.mc_Image2.gotoAndStop(parseInt(two)+1); clearInterval(stopID); }, hensu); stop2ID = setInterval(function () { _root.mc_Image3.gotoAndStop(parseInt(three)+1); clearInterval(stop2ID); }, hensu2); //押されたかどうかの変数を「偽」に flg_StartStop = false; //カウンタを増やす count++; } else { //ムービークリップを走らせる mc_Image1.play(); mc_Image2.play(); mc_Image3.play(); //押されたかどうかの変数を「真」に flg_StartStop = true; } } ---------------------------- 。 きちんと「gotoAndStop();」させるにはどのように対処すれば よろしいでしょうか。 不足がございましたら申し訳ありません。 何卒よろしくお願い致します。

  • XMLで画像を読み込むと巨大化します・・・

    Flash8にて、外部XML画像とURLを読み込みしています。 初の試みでして、たどたどしくも双方ともに読み込むところまでは皆様のこれまで作られたデータを基に作成出来たのですが、画像を読み込んだときに巨大化されてしまって困っています。 ▼XML --------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <jpeg> <jpegURL>images/image1.jpg</jpegURL> <link>http://yahoo.co.jp/1</link> <jpegURL>images/image2.jpg</jpegURL> <link>http://yahoo.co.jp/2</link> <jpegURL>images/image3.jpg</jpegURL> <link>http://yahoo.co.jp/3</link> <jpegURL>images/image4.jpg</jpegURL> <link>http://yahoo.co.jp/4</link> </jpeg> --------------------------------------------------- 800×250で画像を読み込みたいのですが、 読み込むと、すさまじく巨大化してしまっています。。 作ろうとしているのは、横にスクロールするナビゲーションです。 XMLで画像とリンク先を指定、画像は同じ階層に「img」というフォルダを作って入れています。 下記が、1フレーム目に記載しているASです。 ▼AS --------------------------------------------------- var obj_array:Array = new Array(); var center:Number = Stage.width/2; var menu_num:Number = 4; var maxlength:Number = 800*menu_num; //サイズ指定箇所 var friction:Number = -0.03; var obj_xml:XML = new XML(); obj_xml.onLoad = start_me; obj_xml.ignoreWhite = true; obj_xml.load("scrollslide.xml"); function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = _root.attachMovie("menu", menu_str, i); obj_array[i].num = i; obj_array[i]._x = 800*(i-1); //X座標 obj_array[i]._y = 0; var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; //関数呼び出し obj_array[i].onRelease = release_me; obj_array[i].link = link_str; } } else { seltext = "xml read error"; } } function release_me():Void { trace(this.link); getURL(this.link, "_parent"); } function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; var vx:Number = this._x+speed; if (vx<=-800) { //ステージ左に消えたら vx += maxlength; //サムネイルの最後列の後ろに移動 } else if (vx>=Stage.width+10) { //ステージ右に消えたら vx -= maxlength; //サムネイル最前列の前に移動 } this._x = vx; updateAfterEvent(); } function roll_me():Void { this._alpha = 80; } function rollout_me():Void { this._alpha = 100; } stop(); --------------------------------------------------- サイズを指定している箇所に問題があるのでしょうか。 初心者でして、全く見当がつかず困っております。 もしよろしければ、先人の方たちにご意見とご指摘を頂ければと思います。宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • flashで、 サウンドONで始まりON/OFFボタンで制御したい

    サウンドが鳴っている状態で始まり、それをON/OFFボタンで制御したいのですが、参考書やネットに載っているものを参考に作ろうとしているのですが、どうしてもできません。 サウンドなしの状態で始まり、それをON/OFFボタンで制御するものは、http://oshiete1.goo.ne.jp/qa2790650.html にある、serial74さんの回答を使わせていただきました。 これを応用すればきっとできるのだと思いますが、参考書を一通り終えた初心者で、いろいろと変えてみたのですがわかりません。 どなたか教えていただけると大変助かります。 以下、“FLASHでサウンドのON/OFFボタンでBGMの再生を制御したい”の質問へのserial74さんの回答です。 引用はじめ-------- may_07さんの求めていらっしゃるレベルが分からないので細かく書いていますが「こんなの知ってるよ」と気を悪くなさらないでくださいね。 ▼コレをボタンにしたいムービークリップに書いてみてください。 ************************* onClipEvent(load){ Oto=new Sound(); //サウンド用空オブジェクトOtoを作る Oto.attachSound("xxxxxx"); //Otoにサウンドを割り当てる SoundFlag=false; //音の状態フラグをfalse=鳴っていないにしておく } onClipEvent(enterFrame){ this.onPress=function(){ //コレをクリックしたとき if(SoundFlag==true){ //音が鳴っていたら Oto.stop(); //音を止める SoundFlag=false; //音の状態フラグを切り替える } else{ //音が鳴っていなかったら Oto.start(0,999); //音をループ再生 SoundFlag=true; //音の状態フラグを切り替える } } } ************************* ●すでに音の読み込みができている状態でしたらonClipEvent(load){}内はムシしてください。 ●「Oto」「SoundFlag」は変数なので自分のわかりやすい名前にしてください。 ●「xxxxxx」はライブラリを開く→読み込んだサウンドを選択→ライブラリのメニュー→リンケージ→識別子でつけた名前です。 ●サウンドをスクリプトで扱うときは、サウンド自体に名前(識別子)をつけて、さらにサウンドオブジェクトにしてあげて(よく「関連づける」と言われます)、サウンド オブジェクトの設定をいじる、といった流れです。 引用おわり-------- serial74さんの回答のとおりに私が作ると、ボタンを押しても1回目は反応がなく2回目にサウンドONになります。(ブラウザを通した場合) ブラウザを通さずswfそのものでは、ボタンを押すと1回目でONになります。 きっと基本的なところでつまずいているのだと思いますが、原因がわかりません。こちらについても原因がお分かりの方がいらっしゃったらご教示ください。 どうぞよろしくお願いします。

専門家に質問してみよう