電子書籍の厳選無料作品が豊富!

ムービークリップを読み込むと、タイムラインに関係なく動き続けるかとおもいますが、それを時間、もしくはフレームごとに動きを止めて再度動かすような動きはスクリプトでどのようにかくのでしょうか?
作りたいアクションは、画面左からスライドして入ってきて、真ん中で減速しながら停止、3秒ほど待って、今度は加速しながら画面右にスライドしていく動きを作りたいです。

flashMx2004、windowsXPです。

A 回答 (1件)

ご質問の題名と,質問内容の前半とは一致しています。


でも,
>>作りたいアクションは、…
からの後半が全然違うものになっていると思います。なので正確には理解ができません。
前半と後半をもし同じようにとらえていらっしゃる場合は,
Flashの根本的な認識を少し間違えられているような気もするのですが…。
ちょっと不安です。

「ムービークリップを読み込む」とかいう前に,ムービークリップを読み込まずに,ステージ上にムービークリップを置いた場合は操作できるのでしょうか。


~~~例です~~~

真っ白なステージに,"静止テキストで",例えば ★ と描きます。
その ★ を右クリック→「シンボルに変換」でムービークリップにします。
ムービークリップ内のタイムラインを2フレームにします。
2フレーム目をキーフレームにして,その2フレーム目の ★ を ☆ に変えます。
ドキュメントの編集に戻りパブリッシュすると,
★☆★☆★☆★☆… …
とメインムービーのタイムラインに関係なく点滅しますよ。
ここまではOKですか?

これを,メインのムービーからの操作で点滅をストップさせるのは,
まずムービークリップにインスタンス名を付けます。
それで,そのインスタンス名に向けて stop(); を書けば点滅は止まります。
この説明では,インスタンス名を hoshi としたとします。

メインのムービーにボタンシンボルを作って,
そのボタンに

on (release) {
_root.hoshi.stop();
}

これで,星の点滅が止まります。
また始めたいときは,別のボタンシンボルを作って,

on (release) {
_root.hoshi.play();
}

です。
この説明ではボタンにしましたが,例えばメインムービーのタイムラインを90フレームにして,
20フレーム目のタイムラインに

_root.hoshi.stop();

60フレーム目のタイムラインに

_root.hoshi.play();

と書いても良いですね。ボタン操作ではなく,自動的に星ムービークリップが止まったり動き出したりします。

これが,前半までの回答に近い物です。
後半の
>>作りたいアクションは、…
の話とは全く関係ありません。

後半は,このムービークリップの動かし方になります。
メインムービーのステージ上の左端に上で作った星を置いて,
20フレーム目,60フレーム目,最終フレームをキーフレームにして,
20と60フレームの星はステージ中央に配置,
最終フレームの星はステージ上の右端に配置,
そのレイヤーをモーショントゥイーンでつなげば
ステージ上の左から中央に星が移動し,3秒ほど止まり,また動き出すアニメーションができます。
20フレーム目には _root.hoshi.stop(); ,
60フレーム目には _root.hoshi.play(); 
と書けば,止まっている間だけ星が点滅しないアニメーションになります。

>> 減速しながら停止
>> 加速しながら画面右にスライド

ということなので,
タイムラインの星があるレイヤーのフレーム1を選択して,
プロパティより,モーショントゥイーンの,イージングを 100 くらいにします。
今度はタイムラインの星があるレイヤーのフレーム60を選択して,
プロパティより,モーショントゥイーンの,イージングを -100 くらいにします。
すると「減速しながら停止」「加速しながら画面右にスライド」ができます。
参考「簡単なイージングの使い方」
http://www.mediacreator.jp/tutorials/print_tutor …

-・-・-ちなみに,全然関係ない話ですが-・-・-・-・-・-・-
先日10月12日に発売開始となった,Flash Professional 8では,このイージング機能がもっとすごくなっています(体験版で実感)。
100とか-100とかいう単純なものではなくてペジェ曲線でグネグネ指示できます。
もしアップグレードなどされるとしたら,この辺が使いどころの1つです。
http://www.macromedia.com/jp/software/flash/flas …
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-

~~~~~~~~~~~~

これを,ムービー中のムービークリップではなく,外部SWFを読み込んで表示する場合は,
loadMovie を書けば良いだけで,簡単なことです。

外部SWFを hoshi.swf であったとして, それを hoshi ムービークリップに読み込めば良いので,
_root.hoshi.loadMovie("hoshi.swf");

とタイムラインのフレーム1に書けば良いです。


「ムービークリップ内の動きを止める。」
「ムービークリップをモーショントゥイーンで動かす。」
という全く違った2点についての回答は以上です。

=====================================

「作りたいアクションは」
と書かれていますが,これはアクションスクリプトで全てを動作させたいという意味ですか?
その前に「上のようなことはできるのか。」「動きはそれでOKなのか。」そこがまずわかりませんが。

「上のようなことはできる。」「動きはそれでOK。」という場合,
上の状態のようなものをスクリプトでする場合は以下のようになります。

ステージの幅が550pxだった場合です。
まずステージ上に
hoshi というインスタンス名の小さな目立たないムービークリップを作ります。
そして,
タイムラインのフレーム1には外部 hoshi.swf をロードするスクリプトを書きます。

-------------------------------
_root.hoshi.loadMovie ("hoshi.swf");
-------------------------------

hoshi というインスタンス名の小さな目立たないムービークリップには以下のようなスクリプトを書きます。
hoshi を置く位置は y軸(上下)だけ気をつけてください。
置いた位置で固定されます。
x軸(左右)はどこでも適当でかまいません。
どこに置いてもスクリプトで決まります。

---コピペ可------------------------
onClipEvent (load) {
this._x = 0;
frm = 0;
spd = 0;
}
onClipEvent (enterFrame) {
frm++;
if (frm<=20) {
this._x += (275-this._x)*0.3;
} else if (frm>20 && frm<=60) {
this._x = 275;
this.stop();
} else if (frm>60 && this._x<550) {
spd += 2;
this._x += spd;
this.play();
} else if (frm>=90 || this._x>=550) {
this._x = 550;
}
}
-------------------------------

この回答の前半で説明したモーショントゥイーンで動かす場合とほとんど同じです。
数字は適当に変えてください。

一応上記スクリプトの説明を書いておきます。
インデントを付けるために各行の前には全角空白文字をたくさん入れています。
そのままコピペはできません。

---コピペ不可--------------------

//このムービークリップが表示されたとき
onClipEvent (load) {
   //x座標は0にセット
   this._x = 0;
   //変数 frm と spd を初期化
   frm = 0;
   spd = 0;
}

//1フレーム進む時間毎に1回以下を実行
onClipEvent (enterFrame) {

   //変数 frm を 1 ずつ加算
   frm++;

   //frmが20以下の時
   if (frm<=20) {
      //x座標を275に近づける
      this._x += (275-this._x)*0.2;

   //frmが20より大きく,60以下の時
   } else if (frm>20 && frm<=60) {
      //x座標を275で固定
      this._x = 275;
      //ムービークリップ内の動きをストップ
      this.stop();

   //frmが60より大きく,x座標が550より小さい時
   } else if (frm>60 && this._x<550) {
      //変数 spd を 2ずつ加算
      spd += 2;
      //x座標を spd ずつ加算
      this._x += spd;
      //ムービークリップ内の動きをスタート
      this.play();

   //frmが90以上,またはx座標が550以上になった時
   } else if (frm>=90 || this._x>=550) {
      //x座標を550で固定
      this._x = 550;
   }
}
-------------------------------

のようになります。
スクリプトでするのであっても,タイムラインを使ったモーショントゥイーンなどでするのであっても,別々な物は別々に考えて,別々なものを時間的に同時に実行させるように合体させてください。

===================================

ここまで書いて,今思ったのですが,
ひょっとして,ムービークリップ内のフレームレートだけを変更したいということでしょうか?
それは無理です。
「fps 設定を変更すると、メインタイムラインとムービークリップタイムラインはすべて指定されたフレームレートで再生されます。」
とここ↓にも書いてあります。
「Flash を初めて使用する方へ」
http://www.macromedia.com/jp/devnet/flash/articl …
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。
質問の仕方を今後は熟考してから質問いたします。
助かりました、こんごともよろしくおねがいいたします。

お礼日時:2005/10/19 05:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!