• ベストアンサー

ムービークリップの移動で…

Flash初心者です。 左右に動くMC(b_mc)を作っているのですが、それが1500px以上移動した時に、別のMC(right_mc)を出現・移動させ、それ以外は表示させないようにしたいのですが、アクションスクリプトをどうやって記述したらいいのか分かりません。 どなたかご教授下さい。 宜しくお願いいたします。

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

  • ベストアンサー
noname#35109
noname#35109
回答No.2

#1です。 > 「それ以外」というのは、1500px以下では > right_mcは表示させないという意味です。 そういう意味でしたか。 とり違えておりました。 しかしそれだと,#1ですでに1つの方法を回答していますよ。 #1の最初の場合で行くと, 「白幕を作る」部分を除けば良いだけです。 ステージ上に ■ と ● のムービークリップを作成。 ■=ムービークリップ:インスタンス名 「b_mc」 ●=ムービークリップ:リンケージの識別子「right_mc」 ●はステージ上から消しておいて, _root のフレーム1に次のように書きます。 ---------------------------------- // b_mc の 初期座標を 変数 bx に記録 bx = _root.b_mc._x; // 状況を示す変数 stt (atate)の初期化 stt = 0; // // 1フレーム進時間ごとに毎回実行 _root.onEnterFrame = function() { // b_mc のx座標を 20 ずつ加算 _root.b_mc._x += 20; // // もし b_mc の x座標 が bx+1500 より大きくなって // stt の値が 0 であれば if (_root.b_mc._x>1500 && _root.stt == 0) { // シンボル right_mc を // インスタンス名 right_mc で 深度1 に呼びだす _root.attachMovie("right_mc", "right_mc", 1); // 座標はステージ中央 _root.right_mc._x = Stage.width/2; _root.right_mc._y = Stage.height/2; // 即,stt の値を 1 にする _root.stt = 1; // // stt の値が 1 であれば } else if (_root.stt == 1) { // right_mc の x座標を 10 ずつ加算 _root.right_mc._x += 10; } }; ---------------------------------- こんな感じでできると思いますが。 「right_mc」を出す位置がわからないので, 適当にステージ中央にしているだけです。 ===================== 「right_mc」をライブラリから呼びだすのではなく, 最初は非表示にしておく方法もありますが。 ステージ上に ■ と ● のムービークリップを作成。 ■=ムービークリップ:インスタンス名 「b_mc」 ●=ムービークリップ:インスタンス名 「right_mc」 そして_root のフレーム1に次のように書きます。 ---------------------------------- // right_mc を非表示にする _root.right_mc._visible = false; // b_mc の 初期座標を 変数 bx に記録 bx = _root.b_mc._x; // 状況を示す変数 stt (atate)の初期化 stt = 0; // // 1フレーム進時間ごとに毎回実行 _root.onEnterFrame = function() { // b_mc のx座標を 20 ずつ加算 _root.b_mc._x += 20; // // もし b_mc の x座標 が bx+1500 より大きくなって // stt の値が 0 であれば if (_root.b_mc._x>1500 && _root.stt == 0) { // right_mc を表示する _root.right_mc._visible = true; _root.stt = 1; // // stt の値が 1 であれば } else if (_root.stt == 1) { // right_mc の x座標を 10 ずつ加算 _root.right_mc._x += 10; } }; ---------------------------------- その他, 最初, _root.right_mc._alpha = 0; としておいて,b_mc が 1500px 動いたときに, _root.right_mc._alpha = 100; にする。 という方法もありますね。 > ifとelse ifで記述できるかと思ったのですけど > なかなか動いてくれなくて…。 #1のスクリプトも上の2つのスクリプトも, ifとelse ifで条件分岐して動かしていますよ。 onEnterFrame などで,いつも b_mc の座標を監視しておいて, if判定する必要はあると思いますが。

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

その他の回答 (1)

noname#35109
noname#35109
回答No.1

> それ以外は表示させない のですか。 何か特定なものを表示させないのではなくて,それ以外の物すべてを...。 案ですが b_mc が1500px以上移動した時に, ステージ全体を白幕で覆ってしまって, その白幕の上に right_mc を出現・移動させるのも1つの方法ではないでしょうか。 新規ドキュメントを作成して, てきとうな ■ でも描いてムービークリップに変換し, インスタンス名に 「b_mc」 と付けます。 その隣り辺りにでも, てきとうな ● を描いてムービークリップに変換します。 そして, ライブラリを表示させてライブラリ内の ● を選択し, 右クリック → リンケージ でリンケージプロパティを表示させ,  リンケージ(V):□ActionScriptに書き出し にチェックを入れます。 すると自動的に □最初のフレームに書き出し にもチェックが入りますから, そのチェックは入れたままにしておきます。 □ActionScriptに書き出し にチェックを入れると,  識別子(I):[       ] が入力可能になりますから, その識別子の欄に 「right_mc」 と記入します。 そして 「OK」 ボタンをクリックします。 ステージの編集に戻って, 上で作成した ● のムービークリップを削除します。 ●はシンボルとしては残っているのでステージ上から削除しても大丈夫です。 そして, ステージ上に ▲ や □ や - や × や を無茶苦茶に落書きし, その他,ダイナミックテキストやなんでもかんでも思い付くものを配置します。 レイヤーもいくつ追加してもかまいません。 そして最後に, ActionScript を書くためのレイヤーを追加して, そのレイヤーのフレーム1に次のように書きます。 ----------------------------------- // b_mc の 初期座標を 変数 bx に記録 bx = _root.b_mc._x; // 状況を示す変数 stt (atate)の初期化 stt = 0; // // 1フレーム進時間ごとに毎回実行 _root.onEnterFrame = function() { // b_mc のx座標を 20 ずつ加算 _root.b_mc._x += 20; // // もし b_mc の x座標 が bx+1500 より大きくなって // stt の値が 0 であれば if (_root.b_mc._x>1500 && _root.stt == 0) { // 空のムービークリップ maku_mc を深度 0 に作成 _root.createEmptyMovieClip("maku_mc", 0); // link_mc にステージの大きさの白色塗りを作図 _root.maku_mc.beginFill(0xFFFFFF, 100); _root.maku_mc.moveTo(0, 0); _root.maku_mc.lineTo(Stage.width, 0); _root.maku_mc.lineTo(Stage.width, Stage.height); _root.maku_mc.lineTo(0, Stage.height); _root.maku_mc.lineTo(0, 0); _root.maku_mc.endFill(); // シンボルmaku_mc を // インスタンス名maku_mc で 深度1 に呼びだす _root.attachMovie("right_mc", "right_mc", 1); // 座標はステージ中央 _root.right_mc._x = Stage.width/2; _root.right_mc._y = Stage.height/2; // 即,state の値を 1 にする _root.stt = 1; // // stt の値が 1 であれば } else if (_root.stt == 1) { // right_mc の x座標を 10 ずつ加算 _root.right_mc._x += 10; } }; ----------------------------------- すると, b_mc が,最初配置した場所より 1500px 右に移動したとき, 落書きしたもの全てが消えて,right_mc が出没し,右に動きだします。 一応,見た目は right_mc 以外は見えなくなると思います。 本当に消えるわけではなく,見た目が消えるだけですけどね。 第39回 Flashでお絵かきアプリケーションを作ってみよう http://pc.nikkeibp.co.jp/article/COLUMN/20070309/264369/?ST=skillup&P=2 「リンケージについて」 http://www.1art.jp/flash/le/lessona/lessona.htm ====================================== 別の方法ですが, こんな方法もアリかもしれません。 もっと無茶な方法ですけど。 ムービー自体の構造は上のままで,スクリプトのみの変更です。 ----------------------------------- // b_mc の 初期座標を 変数 bx に記録 bx = _root.b_mc._x; // 状況を示す変数 stt (atate)の初期化 stt = 0; // // 1フレーム進時間ごとに毎回実行 _root.onEnterFrame = function() { // b_mc のx座標を 20 ずつ加算 _root.b_mc._x += 20; // // もし b_mc の x座標 が bx+1500 より大きくなって // stt の値が 0 であれば if (_root.b_mc._x>1500 && _root.stt == 0) { // 全てのものを _root ごとおもいっきり下に移動 _root._y = Stage.height+1000; // シンボルmaku_mc を // インスタンス名maku_mc で 深度0 に呼びだす _root.attachMovie("right_mc", "right_mc", 0); // 座標はステージ中央 _root.right_mc._x = Stage.width/2; _root.right_mc._y = Stage.height/2-(Stage.height+1000); // 即,state の値を 1 にする _root.stt = 1; // // stt の値が 1 であれば } else if (_root.stt == 1) { // right_mc の x座標を 10 ずつ加算 _root.right_mc._x += 10; } }; ----------------------------------- かなり無茶な方法だと思います。 ====================================== また,別の方法ですが, 普通は行かないような空白キーフレームのみのフレームを用意して, b_mcが 1500px 以上移動した時に その空白キーフレームのみのフレームに gotoAndStop() して, right_mc を attachMovie で呼びだしても良いかもしれません。 「それ以外は表示させない」 が難しいのですよ。 表示させたくないものを1つのムービークリップなどにまとめて入れてあると, 削除や非表示も簡単なのですが, _root に置いた ムービークリップ も ボタン も テキストフィールド も シェイプ も ビットマップ画像も… というような,あらゆるものを非表示にした上で, right_mc のみを表示させるのはなかなか良いアイデアが浮かびませんね。

snowdrop25
質問者

お礼

sassakun様 返信ありがとうございます。 「それ以外」というのは、1500px以下ではright_mcは表示させないという意味です。 ifとelse ifで記述できるかと思ったのですけどなかなか動いてくれなくて…。 説明不足ですみません。

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

関連するQ&A

  • ActonScriptでムービークリップの移動

    お世話になります。 a_mc b_mc の2つのムービークリップがあり、 +-のボタンを押すとそれぞれ左右に130pxずつ動くようにスクリプトを記述しています。 (例) on (release) { a_mc._x -=130; b_mc._x -=130; } とか on (release) { b_mc._x -=130; } a_mc、b_mcは一緒にも個別にも移動できるようにしております。 a_mc、b_mcどちらも動くようにして、なおかつボタンを設けてそれを押せばb_mcをどんなに移動させていても 1クリックでa_mcの位置に戻るようにさせたいのですが、どうやったら出来るのか分かりません。 Point.clone()とか使えばいいのかと思ったのですが、a_mcの座標位置が変わるとうまく動きません。 分かりにくい説明で申し訳ないのですが、本当に困っています。 初心者なので分かりやすく説明していただけるとありがたいです。 どうぞ宜しくお願いいたします。 環境: WindowsXP、Flash Professional 8

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

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

  • ムービークリップの制御について

    スクリプト初心者です。 ムービークリップの制御について、まったくわからず困っています (1)シーン1、5フレーム目にムービークリップ、インスタンス名a_mc配置 (2)a_mcの中にb_mc配置。b_mcをクリックすると→a_mcの1フレーム目に移動。もう1度b_mcクリックすると→a_mcの10フレーム目に移動。もう1度b_mcをクリックすると→a_mcの1フレーム目に移動・・・と、 b_mcをクリックするごとにa_mcの1フレーム目、10フレーム目、1フレーム目・・繰り返す制御をしたいのですが。。 どなたか分かる方いましたら 教えてください!!

  • Flashでムービークリップを常に上に表示する方法

    Flashの初心者で、次のことにつまずいています。 初心者のためにわかりやすく教えていただけたら助かります。 複数のムービークリップ(MC)があるとします。 その中のMCの1つをドラッグして他のMCに重なったときに、ドラッグしたMCが常に他のMCの上に表示されるようにしたいのですが・・・。 どのMCをドラッグした場合でも、他のMCの上に表示されるようにしたいです。 Flashのバージョンは、CS5.5で、アクションスクリプト2.0を使用しています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ムービークリップ再生後の移動

    ボタンが複数あり、1つのムービークリップ再生後に、違うページに移動させることは可能でしょうか? 例 ボタン「A」→ムビークリップ「MC1」→ページ「P1」 ボタン「B」→ムビークリップ「MC1」→ページ「P2」 ボタン「C」→ムビークリップ「MC1」→ページ「P3」 というような感じです。 ボタン「A」があった場合、ムビークリップ「MC1」を再生後、ページ「P1」に移動、ボタン「B」は、ムビークリップ「MC1」を再生後、ページ「P2」に移動といことができればと思っています。 初心者なので、なるべく簡単な方法でどなたか知恵を貸していただけないですか?よろしくお願いします。 「Flash MX2004」で製作しています。

    • ベストアンサー
    • Flash
  • ムービークリッププロパティの変更

    こんにちは。 ムービークリップA_mcをロールオーバーした時にムービークリップB_mcを表示ロールアウトした時にムービークリップB_mcを非表示にしたいのです。 まずはムービークリップB_mcの_alphaを100にするスクリプトを記述しようとしています。 B_mcはアニメーションですでに_alpha=0でステージにおかれています。 A_mcに on(rollOver){ _root.B_mc._alpha=100; } on(rollOut){ _root.B_mc._alpha=0; } と記述したのですが、表示されませんでした。 試しにと on(rollOver){ _root.B_mc._visible=true; } on(rollOut){ _root.B_mc._visible=false; } としてもだめでした・・・ すみません。原因がよくわからず対処方法もわかりません・・・何方かご教授頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • ボタンによるムービークリップ移動

    flashmx2004/actionscript2.0です。 ボタンにrollOverすると、別の場所にあるムービークリップが所定の位置まで移動する、と言う動きをさせたいと思っています。 ムービークリップがMC1としますと、単純にボタンに MC1._x=0; MC1._y=0; と指定したらその位置に移動はしますが、これのように瞬時に移動ではなく、動きがわかる程度のスピードで動くようにしたいのです。 イメージとしましては画像の上にシャッターのように次の画像が来る形にしたいのです。 フレームをあまり使わず、可能であればボタン1個で動作させたいのですが、どうにも手詰まりです。 ご教授戴ければ幸いです。

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

    毎度すみません。 複数のムービークリップ(以下MC)をステージに時間差でバラバラの位置に登場させたいのですが、最初で行き詰まってしまいましたのでご質問させてください。 5個のMC(1~5)をステージに配置し、インスタンス名をmc1~mc5で振っています。 スクリプトレイヤーに以下の様に記述しています。 ------------ for(i=1;i<5;i++){ var mc = this["mc"+i]; mc.num = i; } mc.num._visible = false; mc.num._alpha = 0; //MCを時間差で任意の位置に表示 var t=0; this.onEnterFrame = function(){ t++; if(t==25){ mc1._visible = true; mc1.onEnterFrame = function(){ this._y = 50; } } if(t==50){ mc2._visible = true; mc2.onEnterFrame = function(){ this._y = 100; } } if(t==75){ mc3._visible = true; mc3.onEnterFrame = function(){ this._y = 150; } } //以降、mc4、mc5は省略 } --------- --------- mc.num._visible = false; mc.num._alpha = 0; --------- の部分で、デフォルト時はmc1~5を非表示にしているつもりが、 最初から表示されてしまいます。 初心者なので、近いフラッシュを見よう見真似で作成しています。 根本的に記述法を間違えておりましたら、恐れ入りますがご指摘ください。 またもっと効率的な方法がありましたら、ご教授いただければ幸いです。 Flash8.0、ActionScript2.0で制作しています。

    • ベストアンサー
    • Flash
  • ムービークリップの中フレーム移動を「キーボード」で行いたい!

    FLASH初心者なのですが、ちょっとしたクイズを作らなくてはいけなくて ActionScriptに挑戦しています。 rootにひとつのMCがあります。 このMCのタイムラインにはフレームが7個あり このフレームの移動を「Spaceキー」で動かしたいため rootのタイムラインに下記のようなscriptを書きました。 ------------------------------------- onClipEvent (enterFrame) { this.gotoAndStop(1); if (Key.getCode() == Key.SPACE){ this.gotoAndStop(2); } } ------------------------------------- このコードで「スペース」を押すと1フレームから2フレームへの 移動はできましたが、「スペースを押すたびに次のフレームにいってほしくて、 フレーム7ではストップしてほしい」という動作をさせるためには どうしたらいいのでしょうか? loopとかif...else if...などの構文がよくわからないなりに 試したのですが、うまくいきませんでした。 分かられる方助けてください、よろしくお願いします。

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

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

    • ベストアンサー
    • Flash
このQ&Aのポイント
  • DCP-J987Nを使用してディスクレーベルを印刷しようとした際に、スマホのiPrint&Scanから写真を設定する際に写真のロードに失敗する問題が発生しました。
  • この問題を解決するために、以下の手順を試してみてください。まず、WiFi接続が正常に行われているか確認してください。
  • 次に、iPhoneXRの設定からiPrint&Scanアプリに関連するすべての権限を有効にし、再度写真の選択を試みてください。もしどれも解決しない場合は、製品のサポートセンターにお問い合わせください。
回答を見る