• 締切済み

至急!flashCS6,AS3.0です

雪 のアニメーションを1フレームで作り、無 事作動しました。しかしループをさせるた め2フレーム以上にすると無限に雪が出て きます。なぜそうなるのか、また対処法を 教えてほしいです!! ちなみに雪は一粒の雪をムービークリップ にし新しいレイヤーのアクションフレーム に書き込んで作っています。 こちらのサイトの作り方で作っています→h ttp://d.hatena.ne.jp/habu024/20100201/12 65025878

みんなの回答

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

◎前置き もし 「[技術者向] コンピュータ > プログラミング > Flash」カテゴリにご質問されていたら その「至急!」に対応できたかもしれませんが, 「デジタルライ > ソフトウェア > その他Adobe」カテゴリではねぇ。。。 私は,たまたま気が向いて このコミュで Flash と検索してみたから偶然このご質問を発見できただけです。 普段ならそんなことしませんから, 普通であればこのご質問を見ることすらなかったでしょう。 というわけで, ご質問の「至急!」には全く対応できておらず, すでに手遅れである可能性も高いですが一応回答しておきます。 . =/=/=/=/=/=/=/=/=/=/=/=/=/= ◎回答本題 > 2フレーム以上にすると無限に雪が出てきます。 > なぜそうなるのか それは簡単なことで, そのスクリプトを書いたタイムラインのフレームがループ再生されて 何度も何度もその降雪スクリプトが実行されるからでしょう。 . > また対処法を 教えてほしいです!! 何度も降雪スクリプトを実行させなければいいわけです。 対処法はいくつかありますが,2つばかり書いておきます。 【対処法1】降雪スクリプトを1回だけ動作させる方法 スクリプトを次のように変更(前後に付け足し)します。 //================================================ //降雪スクリプトが実行されたかどうかのフラグを宣言 var action_flg:Boolean; //もし action_flg の値が false であれば if(!action_flg){ //action_flg の値を true にする action_flg = true; //---↓この間に書かれているスクリプトを記述↓--- //---↑この間に書かれているスクリプトを記述↑--- } //================================================ 【対処法2】降雪スクリプトをMC(ムービークリップ)内に書く方法 原因としては メインのタイムラインに降雪スクリプトを書いた上で そのメインのタイムラインをループ再生させるから 何度も降雪スクリプトが実行されてしまうわけです。 ですから, 内部が1フレームだけの MC(ムービークリップ) を用意して その MC の中に降雪スクリプトを書けば メインのタイムラインをループ再生させても大丈夫になるわけです。 (ムービークリップ内はループ再生されないため何度も降雪スクリプトが実行されることはない。) メインのタイムラインのフレーム1のステージ上に 空のMCでも作成して その "MCの基準点(+印)がステージの左上のコーナーに来るように" MCを配置し, その空のMC内のフレーム1に 書かれているスクリプトを書きます。 ただしその場合, //雪を配置して配列にいれる addChildAt(snow, 1); この部分 1 を 0 に変更します↓。 //雪を配置して配列にいれる addChildAt(snow, 0); 空のMCは 一旦,適当な形の小さな塗りでも描いて, それを「ムービークリップに変換」し そのMC内のタイムラインの編集に入って 適当な形の小さな塗りを消せば良いだけですよね。 その他の対処法としては, ドキュメントクラスのクラスファイルを作成して そのドキュメントクラス内に書かれているようなスクリプトを記述方法などもあります。 【対処法1】と【対処法2】で言えば 私は【対処法2】の方をお薦めします。 なぜなら, 雪を降らせる位置(上下順)を スクリプト入りのMCの配置レイヤーなどで決めることができるからです。 例えば 部屋の窓から外の雪が見えるアニメーションを作成するとします。 その場合, スクリプト入りのMCは 背景より上のレイヤーで なおかつ部屋(部屋の窓)よりも下のレイヤーに配置すれば 部屋の外(窓の外)に雪を降らせることができるようになります。 ※参考【添付図】↓ 【対処法1】では どこの位置(上下順)に雪を降らせたいのかを数値で判断して 数値で位置(上下順)指定する必要が出てきます, 部屋(窓)の表示インデックス順の数値など,一々把握しにくいです。 また【対処法2】では 作る物によって //雪を配置して配列にいれる addChildAt(snow, 0); この 0 の値を書き換える必要もなくなります。 ですから【対処法2】の方がお薦めです。

関連するQ&A