Flash CS3での画像移動に関する疑問

このQ&Aのポイント
  • Flash CS3のAS2.0を使って、画像を左右に移動させる方法について疑問があります。具体的には、ステージの幅を120とし、7枚の画像を連続して表示し、左右ボタンを使って移動させたいです。ボタンの配置やアクションスクリプトの記述について教えてください。
  • 1フレーム目には左向きのボタンを配置して、クリックすると画像を左に移動させることができます。また、7番目の画像まで移動すると3フレーム目に進むように設定しています。しかし、2から6番目の画像では、左右のボタンをどのように表示させれば良いのかわかりません。どのようなアクションスクリプトを記述すれば良いでしょうか。
  • 1番目の画像では右向きのボタンのみ必要です。この場合、どのようにアクションスクリプトを記述すれば良いでしょうか。全体の動きについて教えていただけると助かります。
回答を見る
  • ベストアンサー

左右ボタンで方向切替

FLASH CS3 AS2.0で作っています。 ステージの幅120とします。画像を7枚つなげてインスタンス名をmy_mc。 my_mcの左上を基準として左右ボタンを使い、移動させようとしています。 左右ボタンの配置が次の3種類になるためタイムラインが3フレーム必要になります。 1フレーム → 2フレーム ← → 3フレーム ←    こうした場合、パブリッシュすると連続して再生するため止める必要があり1フレームに stop();を入れます。それでは、アクションスクリプトはそれぞれのボタンに記述しなければなりません。 疑問(1)通常、こんな使い方になるのでしょうか? 1フレームめにアクションスクリプトを記述するのが当たり前と思っているのですがこれは間違いになりますか。 →ボタン(画像は左方向に動く)  7番目の画像が出たら3フレームに進み←ボタンを表示はできました。 on (release) { my_mc._x -=120;//左へ移動 if(my_mc._x<=-720){ //trace(my_mc._x); gotoAndStop(3); } } 次に2から6番目の画像では、←と→が出なければならなく、この方法がわかりません。 7番目から1番にもどるまで← →の表示はできました。 on (release) { my_mc._x +=120;//右へ移動 if(my_mc._x<=0){ //trace(my_mc._x); gotoAndStop(2); } } しかし、1番目は→だけが必要です。 こうなってくると何がなんやらとても混乱しています。疑問(1)回答ととアクションスクリプトの方法 について教えてください。

noname#142022
noname#142022
  • Flash
  • 回答数1
  • ありがとう数1

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

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

> 1フレームめにアクションスクリプトを記述するのが > 当たり前と思っているのですがこれは間違いになりますか。 そこに間違いとか正解とかはないでしょう。 1フレーム目のにスクリプトを書ける状況であった上で 1フレーム目のみにスクリプトを書きたい場合はそうすれば良いだけです。 1フレーム目のみにスクリプトを集約することができない場合はそうする必要はありません。 また 1フレーム目のみにスクリプトを集約することができたとしても,そうしたくない場合もそうする必要はありません。 「こうすべき」とかはありません。 「できることを臨機応変に最大限に生かす」という方向で考えるのが大切だと思います。 ちなみにご質問のものの場合は, 1フレーム目のみにスクリプトを集約することができます。 (過去のバージョンでしたらできない場合もありますが ActionScript 2.0(Flash Plaeyr 6 以上) でしたら十分できます。) また "私は" 1フレーム目のみにスクリプトを集約させたいと思います。 ですから "私だったら" 次のようにします。 まず 「→」ボタンと「←」ボタンと「my_mc」をフレーム1だけに配置します。 そして 「→」ボタンと「←」ボタンにインスタンス名を付けます。 ここでは 「→」ボタン には「R_btn」というインスタンス名を付け 「←」ボタン には「L_btn」というインスタンス名を付けるものとしておきます。 ※【図↓】参照のこと そしてタイムラインのフレーム1には次のように書きます。 //---------------------------------------- //画像1枚の横幅を設定 var g_w:Number = 120; //画像の枚数を設定 var g_n:Number = 7; //「L_btn(←ボタン)」を非表示にしておく L_btn._visible = false; //カウンタ用変数 var cnt:Number = 0; //「R_btn(→ボタン)」クリック時の動作を定義 R_btn.onRelease = function():Void { //もしカウンタが 画像の枚数-1 未満であれば if (cnt < g_n-1) { //画像の横幅分 左へ移動 my_mc._x -= g_w; //「L_btn(←ボタン)」を表示する L_btn._visible = true; //なおかつカウンタが 画像の枚数-2になれば if (cnt == g_n-2) { //「R_btn(→ボタン)」を非表示にする R_btn._visible = false; } //カウンタに1を加算 cnt++; } }; //「L_btn(←ボタン)」クリック時の動作を定義 L_btn.onRelease = function():Void { //もしカウンタが 0 より大きい場合は if (cnt > 0) { //画像の横幅分 右へ移動 my_mc._x += g_w; //「R_btn(←ボタン)」を表示する R_btn._visible = true; //なおかつカウンタが 1 になれば if (cnt == 1) { //「L_btn(→ボタン)」を非表示にする L_btn._visible = false; } //カウンタから1を減算 cnt--; } }; //----------------------------------------  

noname#142022
質問者

お礼

とても丁寧にコメントを入れてくださり、ありがとうございます。 ボタンの非表示・表示、カウントを次に生かせるよう勉強してまいります。

関連するQ&A

  • flashのMCの中にMCを入れてその中のボタンでシーンを移動したいのですができません

    flashの シーン1で大元になる5つのMCで構成された大元のMCにはonClipEvent (enterFrame)のスクリプトを記述しています。 その5つのMCの中、それぞれに、ボタンがあります。そのボタンはシーン1からシーン2に飛ばすアクションをつけているのですが、まったく反応しません。 なぜか、同一シーンのフレーム移動は反応するのですが。ボタンの記述は下記です。 on (release) { _parent._parent.gotoAndPlay("work", 1);

    • ベストアンサー
    • Flash
  • ボタンを押してもすぐ戻ってしまう・・・。

    1フレーム目に、 onEnterFrame = function():Void { if (_totalframes == _framesloaded) { gotoAndStop("snap"); } total = _root.getBytesTotal(); loaded = _root.getBytesLoaded(); percent = Math.floor(loaded/total*100); _root.bar_mc._xscale = percent; }; stop(); と記入し2フレーム目のフレームラベルをsnapに。 2フレーム目には、画像と次のフレームにいくボタンが置いてあります。 ボタンには、 on(press){ gotoAndStop(3); } と書いてあるのですが。 このボタンを押すと、確かに3フレーム目にいくのですが、すぐ2フレーム目に戻ってしまうんです。 初めてローディングバーをつけてみたので、間違いだらけかもしれないですがどうすればいいか教えてください><

    • ベストアンサー
    • Flash
  • ムービークリップ内のボタン

    フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。

  • チェックボックスの制御(onClipEvent)

    ムービークリップにボタンを二つ組み合わせて作ったチェックボックスをクリックした時に変数clickedの数を0または1に変更するようアクションスクリプトを入力しましたが作動しません。 ムービークリップは、 フレーム1に空ボックス→チェックと変化するボタン、フレーム2にチェック→空ボックスと変化するボタンを配置し、 on(press){ gotoAndStop(2); //フレーム2にはgotoAndStop(1) } とアクションスクリプトを入れています。 これでボタン自体は正常に動くのですが、ボタンがクリックされた状態かどうかを確認する為の変数clickedにクリックした際数字が足されません。 onClipEvent(mouseDown){ clicked++; } 確認のために上記のアクションスクリプトにgotoAndStop(10);のようにフレーム番号を入れ、クリックした際に移動するかも試してみましたが移動しません。こういう場合にonClipEventを使うのが間違っているということでしょうか。 ムービークリップの方に on(press){ gotoAndStop(2); clicked++; } として試してみましたがこちらも上手く行きませんでした。 何か解決法などありましたらアドバイスをよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 子ムービークリップの制御について

    flash初心者です。子ムービークリップの制御について教えてください Tシャツのシュミレーションがあるとします。 シャツ_mcに、1フレーム目「丸くび」、2フレーム目「Vネック」、のカタチで シャツ_mc.色_mcにマスクをかけています。 色_mcには1フレーム目「白」、2フレーム目に「赤」とします。 シャツ_mc.色_mcのそれぞれ1フレームにstop(); ボタン「丸くび_btn」「Vネック_btn」「白_btn」「赤_btn」の4つのボタンで それぞれ組み合わせを作りたいのですが 「丸くび_btn」に on (release) { _root.シャツ_mc.gotoAndStop(1); } 「Vネック_btn」に on (release) { _root.シャツ_mc.gotoAndStop(2); } 「白_btn」に on (release) { _root.シャツ_mc.色_mc.gotoAndStop(1); } 「赤_btn」に on (release) { _root.シャツ_mc.色_mc.gotoAndStop(2); } この場合「丸くび_btn」をクリックして「赤_btn」クリックで「丸くび赤シャツ」ができます ここまではいいのですが 赤の色を保持したまま「Vネック_btn」を押してVネック赤シャツのイメージも見たいのですが 色が白に戻戻ってしまいます。(色_mcの1フレーム目に戻る。) これをなんとかしたいのですが。 (色_mcが選ばれた状態で固定され勝手に移動しないようにしたい) アドバイスお願いいたします。

  • ボタンの有効と無効

    FLASH CS3 AS2.0で作っています。始めたばかりの初心者です。 スライドショーを作りました。画像6枚をつなげてインスタンス名をmy_mcとしました。 ボタンを1つ置きインスタンス名をbt1としました。 import mx.transitions.Tween; import mx.transitions.easing.*; bt1.onRelease = function() { var myTween = new Tween(my_mc, "_x", Regular.easeOut, my_mc._x, my_mc._x-200, 3, true); }; これで動作はするのですが、Tweenを3秒間で行います。3秒のうち、2秒でボタンを押すと 移動が狂ってしまい、うまくいきません。 押された時の、my_mc._xが200区切りでなくなるためと思います。 ボタンを3秒間というか1画面がスライドするのを完了した時点で、ボタンが押せるように したいのです。どんな方法がありますか、教えてください。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • ボタンをクリックするとフェードイン、フェードアウトする方法。

    こんにちは、スクリプトでのフェードイン・フェードアウト表示についての質問なのです。ヴァージョンはFlash MXです。 既存の質問で Flashでボタンをクリックするとフェードイン、フェードアウトする。 の応用を教えていただきたいのですが、 http://oshiete1.goo.ne.jp/qa2766651.html ステージ上にあるいくつかのボタンを押した時に、ある表示部分がフェードアウトし新たな画像がフェードインで表示するようにさせたいのですが、この時各ボタンによって表示部分を変えたい、つまり /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ///////////////////////////表示画像//////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ボタンA ボタンB ボタンC ボタンD ボタンAをクリック時にA画像を ボタンBをクリック時にB画像を フェードイン・フェードアウト表示させたいのです。 つまりフェードアウトした後指定したフレームへ移動させたいのです。 これを複数ボタンで分ける方法がわかりません。 ボタンが一つなら on (release) { // ムービークリップ my_mc 内の変数 flag の値を 1 にする _root.my_mc.flag = 1; } のmy_mcの部分をその画像のインスタンス名へ変えればできるのですが、ボタン数が複数になると一つしか指定できないのでこのやり方では無理です。 ムービークリップがボタン代わりであれば直接スクリプトを書いて on (release) { // 変数 flag の値を 1 にする flag = 1; } と命令することもできるのですが。 質問が分かりにくくて申し訳ありません。 もしご存じの方がおられましたら教えていただきたいです。 よろしくお願いします。

  • ボタンのアクションについて

    flashの初心者です。 シーン1とシーン2を作り、シーン2の中に、文字&ボタンインスタントを一つのフレームに入れ、モーショントゥイーンをかけました。 そして、その中のボタンインスタントにアクションを入れました。 on (release) {gotoAndPlay(350);} ボタンを押し話したときに、350(シーン2)のフレームへ飛んで再生するように設定しました。 しかし、ちゃんと作動してくれません。 シーン2の205からスタートしてしまいます。 シーン1はフレーム数は145まで入ってます。 よく見ると、この145と205を足すと350になります。 つまり、シーン1からシーン2にかけて350番目と言う様になってしまいます。 だから、アクションを on (release) {gotoAndPlay(495);} にすると、きちんと動いてくれます。 シーンを分けているときは、こう言うように足さないといけないのでしょうか? シーン2の350と言うように設定はできないのでしょうか? on (release) {gotoAndPlay("シーン2"350);} では出来ませんでした。 モーショントゥイーンをかけていない、普通のボタンは、普通に設定(145を足さない)でうまく動いてくれます。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • loadMovieで特定のフレームを表示したい

    お世話になっております。 loadMovieで別のswfを読み込むことができますが、読み込んだファイルの特定のフレームを表示させたいのです。 たとえば、a.swfにb.swfをloadMovieします。 a.swfには3個のボタンがあり、それぞれがb.swfの1フレーム、10フレーム、20フレームに対応します。 ひとつのボタンに、 on (release) { this.loadMovie("b.swf"); this.gotoAndStop(10); } としても表示されないのはなんとなく理解できますので、 a.swfにムービークリップ(インスタンス名load_mc)を作り、その中にロードするようにし、さらにa.swfの5フレーム目にload_mcの10フレーム目を表示するように書きました。 ボタンに on (release) { this.load_mc.loadMovie("b.swf"); this.gotoAndStop(5); } 5フレーム目に this.load_mc.gotoAndStop(10); やはり、うまくいきません。 私の考え方が悪いのでしょうか? どうすればいいですか? どなたかよろしくお願いします。m(__)m WinのFLASH8使用です。

    • ベストアンサー
    • Flash
  • ボタン

    以下のようなスクリプトで、写真のメニューを作っています。 画像の読み込みまでは、うまくできたのですが、ボタンにする ところでつまづいています。 以下のスクリプトでは、どのボタンをクリックしても、変数mに10が代入されているため、10.jpgがphoto_mcに表示されてしまいます。どのようにすれば、 menu1_mcをクリックすれば、1.jpg、 menu2_mcをクリックすれば、2.jpg、 menu3_mcをクリックすれば、3.jpg・・・ のようになるのでしょうか?説明が下手で申し訳ありません m(_ _)m i = 10; /*trace(i);*/ for (y=0; y<10; y++) { m = y+1; obj = this.attachMovie("menu", "menu"+m+"_mc", y); obj._x = 30; obj._y = 70*y+10; /*画像読み込み*/ name = "menu"+m+"_mc"; this[name].photo_mc.loadMovie("photo/"+m+".jpg this[name].photo_mc._xscale = 15;//% this[name].photo_mc._yscale = 15;//% /*ボタン化*/ this[name].onRelease = function() { _root.photo_mc.loadMovie("photo/"+m+".jpg"); }; } 環境はFlashCS3、ActionScript2.0です。 よろしくお願いします。