flashで左右スクロールする方法

このQ&Aのポイント
  • FlashCS4で作成したアニメーションによって、要素を左から右にスクロールさせる方法と右から左にスクロールさせる方法を知りたいです。
  • また、スクロール速度を徐々に遅くするアニメーションにすることが理想です。
  • バージョンはFlashCS4で、AS2.0を使用します。具体的なコードの記述方法を教えてください。
回答を見る
  • ベストアンサー

flashで質問したいのですが。

以前にも教えていただいたのですが、 http://okwave.jp/qa/q6531277.html 写真を左から右にスクロールすることはできたのですが、もうひとつしたいことがありまして質問させてもらいます。 以前は一つのシンボルにasを //このMCが表示された時に実行 onClipEvent (load) { //最初に動く速さを設定 speed = 300; //減速度合いを設定 down_speed = 5; } //毎フレーム時間で実行 onClipEvent (enterFrame) { //speed の値が 0 より大きい場合 if (speed > 10) { //speed の値をdown_speedだけ減算 speed -= down_speed; //speed の値が 0 以下になれば } else { //speed の値を 0 で固定 speed = 10; } // //このMCのx座標をspeedだけ右に移動 this._x += speed; // //もしこのMCのx座標が 0 より大きくなれば if (this._x > 0) { //このMCの横幅の半分だけ左に移動 this._x -= this._width / 2; } } と入力いたしました。 上記のように左から右にスクロールさせるのと同時に右から左ににスクロールさせる方法が知りたいのです。どうかよろしくお願いいたしします。 イメージは下記のような感じで上(左→右)下(右→左)を最初早くスクロールしてだんだんゆっくりスクロールしていくといったアニメーションにすることが理想です。 バージョンはFlashCS4 でas2.0で作成します。

  • vaoi
  • お礼率48% (28/58)

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

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

#1です。 ご質問に対する答えとその求め方は#1ですでに書きましたから, ご質問の回答に直結する部分はそちらを見てください。 この#2はついでの補足です。 せっかくここまで来たのですから ついでに左右に動く「無限ループメニュー」への発展を書いておきます。 時間があれば&気が向かれましたら 前回のご質問,または今回の#1で作成した Flash の ムービークリップに書いたスクリプトを 次のように書き換えて(コピペしなおして)みてください。 ================ //このMCが表示された時に実行 onClipEvent (load) { //スピードの変化度合いを設定 ratio = 1/4; } //毎フレーム時間で実行 onClipEvent (enterFrame) { //(ステージの中央からのマウスの距離)×ratio を算出 speed = (Stage.width/2-_root._xmouse)*ratio; // //このMCのx座標をspeedだけ右に移動 this._x += speed; // //もしこのMCのx座標が 0 より大きくなれば if (this._x > 0) { //このMCの横幅の半分だけ左に移動 this._x -= this._width / 2; //もしこのMCの x座標 が //「ステージ幅-MCの横幅」より小さくなれば } else if (this._x < Stage.width - this._width) { //このMCの横幅の半分だけ右に移動 this._x += this._width / 2; } } ================ 前回までのもの(=右動きのみ)と 今回の#1もの(=左動きのみ)を足すと 「左右どちらにでも動かせるムービークリップ」 になります。 上のようにして作成したムービークリップ内の画像(写真など)をボタンにしておくと 「無限ループメニュー」 にもなるということです。 別の時の何かに使えそうでしょう?  

vaoi
質問者

お礼

BlurFiltan様 いつもご回答ありがとうございます。 確かに考えれば、ちょっと変えるだけでご質問させていただいた通りに、 asを変更するとアニメーションしました。 動いてるのを見てとても嬉しかったです。 マウスによる反応で無限ループさせる方法も教えていただきありがとうございました。 写真選択でのスライドショーなんかに使えそうです。 ほんとFlash制作で大変助かりました。 ありがとうございます。これからもどうぞよろしくお願いします。

その他の回答 (1)

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

ご質問内容は ActionScript と言うよりも 「考えるべきこと」 です。 逆に言えば ActionScript をいくら知っていても「考えなければできない」という内容です。 ですからここはじっくりと考えてみましよう。 まず ご質問で書かれていらっしゃる前回のスクリプトの要部分である 『MC(=ムービークリップ)の折返し部分』 について, 「いつ」&「何をするのか」という形でまとめてみます。 「いつ」 MCの左端がステージの左端よりも右 になったとき 「何をするのか」 MCを MCの横幅の半分の距離 左 に移動させる 今回のご質問ではこの逆をすれば良いということになります。 上の「いつ」&「何をするのか」を今回用に書き直すと次のようになります。 「いつ」 MCの右端がステージの右端よりも 左 になったとき 「何をするのか」 MCを MCの横幅の半分の距離 右 に移動させる 上の 『MCの右端がステージの右端よりも 左 になったとき』 これは 『MCのx座標が「ステージの横幅-MCの横幅」よりも小さくなったとき』 と言い換えることもできます。 ステージの右端座標は,ステージの横幅です。 これは「ドキュメントのプロパティ」ですでに指定してあるはずですからその数値を使っても良いです。 また,使わなくても一般的には「Stage.width」で求められます。 また MC の横幅は,そのMCの「_width」プロパティで求められます。 つまり 「ステージの横幅」も「MCの横幅」もすでにわかっているのですから 『MCの右端がステージの右端よりも左 になったとき』のx座標は 容易に求まるということになります。 ※参照 【図↓】 以上のように考えれば スクリプトは次のように変更すれば良いということになります。 (変更部分は下部の3割程度のみ。) ================ //このMCが表示された時に実行 onClipEvent (load) { //最初に動く速さを設定 speed = 300; //減速度合いを設定 down_speed = 5; } //毎フレーム時間で実行 onClipEvent (enterFrame) { //speed の値が 10 より大きい場合 if (speed > 10) { //speed の値をdown_speedだけ減算 speed -= down_speed; //speed の値が 10 以下になれば } else { //speed の値を 10 で固定 speed = 10; } //---↑以上は元のスクリプトのまま↑--- // //このMCのx座標をspeedだけ左に移動 this._x -= speed; // //もしこのMCの x座標 が //「ステージ幅-MCの横幅」より小さくなれば if (this._x < Stage.width - this._width) { //このMCの横幅の半分だけ右に移動 this._x += this._width / 2; } } ================ 少し考えて答えを見れば, 「なんだ,たったそれだけのことか。」 と思われるのではないかと思います(小学校算数レベルくらい?)。  

関連するQ&A

  • 画像ローテーション

    最近アクションスクリプトをはじめました。 初心者です。 ---------------------------------------------- onClipEvent(Load){ speed = 10; goal = -1*(this._width); } onClipEvent(enterFrame){ if(this._x <= goal){ this._x = 0; } else{ this._x -= speed; } } ---------------------------------------------- なんですが、これを実行すると、 右から左に移動した正方形の画像が 左端へ移動した後、一番右端に戻りません。 左端に到達後、一番右端にその画像をワープさせて またその繰り返しをするにはどうしたらよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

  • MCのgotoAndPlay制御について

    今現在すごく初歩的なものを作っています。 まず、MCですが、1~10フレームは歩く動作、11~20フレームは座る動作 と言ったフレームで動作を表現したものです。 このMC内で1~10フレームを繰り返すようにgotoAndPlay(1)と10フレーム目に書きました。 そして、このMCに onClipEvent (load) { // スピードの初期値 spd = 5; } onClipEvent (enterFrame) { // spd ずつ右へ移動 this._x += spd; if(this._x>100){ spd = 0; this.gotoAndPlay(11); } } といったように A地点~B地点は歩いている動作をさせながら5ずつ移動させ、100まで来たら停止させ、 そのB地点では座る動作(MCの11フレーム目から)をスタートさせるようにしました。 しかし、実際はMCの11フレーム目で固まった状態です onClipEvent (enterFrame)なので当たり前なのは分かっているのですが、 他に方法が分かりません。 何かなるべく完結な方法はありますでしょうか?

    • ベストアンサー
    • Flash
  • つかんで放す

    ムービークリップ(MC)に下記のアクションスクリプトASを記述しました。 右へMCが動いて行き、マウスでクリックすると掴み動かせるようになり、放すとまた動き出すというものになるはずなのですが、上手く行かずクリックするとポインタにくっついた状態になってしまいます。 ASの書き方に問題があるのでしょうか? ご教授いただきたくおもいます。 よろしくお願いします。 onClipEvent (load) {    this._x = 20;    this._y = 200;    Hspeedx = 1; //MCの速度    Hcatch = 0; //MCキャッチの時は1、そうでない時は0に } on (press) {    Hcatch = 1; //MCキャッチ    startDrag(this); } on (release) {    Hcatch = 0; //MCを放す    sotpDrag(); } onClipEvent (enterFrame) {    if (Hcatch == 1) {       Hspeedx = 0;    }    if (Hcatc == 0) {       Hspeedx = 1;    }    this._x = this._x+Hspeedx; }

    • ベストアンサー
    • Flash
  • mcのx座標が50以上になったら次フレーム

    タイトルどおり、 mcのx座標が50以上になったら次フレーム という処理をしたく、 mcに次のアクションスクリプトを記述しました。 onClipEvent(enterFrame){ this._x += 10; } onClipEvent(load){ if(this._x >= 50){ nextFrame(); } } しかし何故か次のフレームに行ってくれません。 どこか間違っているのでしょうか。。。 nextFrame();をgotoAndPlay(2);にしても駄目でした。

    • ベストアンサー
    • Flash
  • Flash マウスの位置で速さの変わるスクロールメニュー

    Flashでスクロールメニューを作成したいのですが、うまくいきません。 ボタンを羅列しムービークリップにし、 onClipEvent (load) { Min = -80*15; speed = 20; } onClipEvent (enterFrame) { if (_parent.mask.hitTest(_root._xmouse,_root._ymouse,0)) { this._x -= _parent.mask._xmouse/speed; if (this._x >0) { this._x += Min; } else if (this._x < Min) { this._x -= Min ; } } } 上記のスプリクトを記述することで動かすことには成功しました。 しかし上記スプリクトでは、ドキュメントサイズ内では、メニューにマウスオーバーしないと制止してしまいます。 http://www.sophia-eternal.com/ 上記サイトの様に、読み込んだ時から常にゆっくりスクロールし、 マウスオーバーした時にのみ動きの速さを変えるにはどのようなスプリクトを追加すればよろしいでしょうか? メニューのみのFlashファイルを作成し、HTMLで組み立てれば早いのですが、 デザイン上、ページ全体を1つのFlashファイルで作成するしかありません。 メニューが常にスクロールしていて、マウスオーバーした時にのみ動きの速さが変わる様にしたいのです。 宜しくお願い致します。

  • flash ふわふわした動き

    こんばんは。 flash 特にactionscriptに関しては“超超”初心者です。 現在、サンプルなどを参考にしつつ勉強中なのですが、 さっそくつまづいています…。 画面の中に、円形のムービークリップをおいて、ふわふわした動きを つけたいのです。(目標としては、シャボン玉のような) ただ、位置は動かず、現在地でゆれているような感じです。 以下のような横の動きをつけて左右に動くのはできたのですが、 縦の動きも変えていかないとふわふわした感じになりません…。 本当は円形にまわるような動きがいいのかもしれないのですが、 どうやって動きを指示したらいいのかわかりません。 onClipEvent (load) { this._x = 450; speed = 1; } onClipEvent (enterFrame) { this._x += speed; if (this._x <= 440 || this._x >= 460) { speed = -speed; } } どなたか、よろしくお願いします。

  • mcのドラッグアンドドロップ処理について

    現在、http://okwave.jp/qa3589973.htmlのドラッグアンドドロップを使用させて頂いております。 上記のスクリプトですと、mcからマウスを放したとき(falseのとき)、瞬時にmcの動作が止まるようになっているのですが、これを目的の座標に移動しつつゆっくりと止まっていくようにするには、どのようにスクリプトを書き換えればよいのでしょうか? また、このmcの中にボタンを配置してリンクを張る場合、どういった方法でスクリプトを書けばよいのかもお教え頂けると助かります。 お分かりの方がいらっしゃいましたらご教授いただけると幸いです。 よろしくお願い致します。 // この MC が表示されたとき onClipEvent (load) { // 重さの変数 weight を設定(変えてください) weight = 10; // ●x座標の最小値 min_x を設定(変えてください) min_x = 100; // ●x座標の最大値 max_x を設定(変えてください) max_x = 300; // ●y座標の最小値 min_y を設定(変えてください) min_y = 50; // ●y座標の最大値 max_y を設定(変えてください) max_y = 350; // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // この MC を押したとき on (press) { // クリックしたかどうかの変数 click_flag を true にする click_flag = true; // ★押した座標を保存 pos_x = this._xmouse; pos_y = this._ymouse; } // この MC をとにかく放したとき on (release, releaseOutside) { // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // 1フレーム進む時間毎に随時実行 onClipEvent (enterFrame) { // click_flag が true の時だけ if (click_flag) { // この座標を 1/weight ずつ ★マウス座標-押した座標 に近づける this._x += (_root._xmouse-pos_x-this._x)/weight; this._y += (_root._ymouse-pos_y-this._y)/weight; // ●設定した x座標最小値以下の場合 if (this._x<=min_x) { this._x = min_x; } // ●設定した x座標最大値以上の場合 if (this._x>=max_x) { this._x = max_x; } // ●設定した y座標最小値以下の場合 if (this._y<=min_y) { this._y = min_y; } // ●設定した y座標最大値以上の場合 if (this._y>=max_y) { this._y = max_y; } } }

    • ベストアンサー
    • Flash
  • FLASH MXで質問です

    アクションスクリプト初心者ですが、無い知恵を振り絞って簡単なシューティングゲームを作ろうと思っています。 そこで質問なのですが、キーボードで自機となるMovieClipオブジェクトを自由に動かしたいのですが、斜めに移動させるにはどの様にしたら良いのでしょうか? 今の所、4方向への移動は onClipEvent(enterframe) { if (Key.isDown(Key.LEFT)) { _x += -10; }else if (Key.isDown(Key.RIGHT)) { _x += 10; //以下上下移動をUP,DOWNキーに割り当て } } としています。 ifの後を&&のAND処理で2つのキーが押された場合をtrueとすれば良いとは思うのですが、書き方が悪いようで機能してくれませんでした。 ぜひアドバイスをお願いします。

  • Flashでの座標指定におけるボタン有効化

    よろしくお願いします。 現在、FLASHでゲームを作成中です。 バージョンはFLASH CS4です。 ASは2.0です。 ボタンが配置されており、更にムービークリップ(以下mc)があります。 ボタンは初めクリックできないようにしておきます(マウスに反応しない)。 mcを十字キーで移動させ、ある座標内(10<=x<=50、10<=y<=50)に入ったとき、 初めてボタンをクリックできるようにするためにはどのようにASを記述すればよいでしょうか? ifでmcが座標内に入っていたら、ボタンをenabled=trueにする感じでしょうか? ご回答よろしくお願いします。

    • ベストアンサー
    • Flash