• ベストアンサー
  • すぐに回答を!

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

  • 質問No.6555327
  • 閲覧数96
  • ありがとう数1
  • 回答数2

お礼率 48% (28/58)

以前にも教えていただいたのですが、
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で作成します。

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

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

ベストアンサー率 91% (1611/1754)

#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

お礼率 48% (28/58)

BlurFiltan様

いつもご回答ありがとうございます。

確かに考えれば、ちょっと変えるだけでご質問させていただいた通りに、
asを変更するとアニメーションしました。

動いてるのを見てとても嬉しかったです。

マウスによる反応で無限ループさせる方法も教えていただきありがとうございました。

写真選択でのスライドショーなんかに使えそうです。

ほんとFlash制作で大変助かりました。

ありがとうございます。これからもどうぞよろしくお願いします。
投稿日時:2011/03/03 16:37

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 91% (1611/1754)

ご質問内容は 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

その他の関連するQ&Aをキーワードで探す

ページ先頭へ