- ベストアンサー
Flashでゼンマイを巻く人形を作りたい
- Flashド素人がゼンマイを巻く人形の作成方法について困っています。
- 要素として人、メーター、ゼンマイを使用し、マウスの操作で動きを制御したいです。
- 具体的な動きとして、マウスを奥に動かすとメーターが溜まり、ゼンマイが巻かれます。マウスを手前に戻すと人が動き出し、メーターが減少し、ゼンマイが戻ります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「メーター」 と 「ゼンマイ」 は同期しています。 これを1つのムービークリップ内のタイムラインアニメーションで作成すれば良いのではないかと思います。 「人」は同期していません。 これは上の2つのムービークリップとは別のムービークリップ内のタイムラインアニメーションで作成すれば良いのではないかと思います。 「メーター」&「ゼンマイ」 は一方向のみのアニメーションで良いです。 「メーター」は増えるだけのアニメーション, 「ゼンマイ」は右回りするだけのアニメーションです。 マウスの座標が上がったとき(yにマイナス方向に動いたとき), 「メーター」&「ゼンマイ」 ムービークリップの再生を正の方向に進めます。 そして, マウスの座標が下がったとき(yにプラス方向に動いたとき), 「メーター」&「ゼンマイ」 ムービークリップの再生を逆方向に進めます。つまり逆再生させます。 私は下の図のような簡単なムービークリップ(MC)を2つ作成して実験してみました。 左のMC には 「meter_mc」 というインスタンス名を付けています。 右のMC には 「man_mc」 というインスタンス名を付けています。 その場合それら2つがあるフレームに次のように書けば, ご質問で書かれていらっしゃるようなことができると思います。 -------------------------------------------- // メーターMC が逆再生するスピードを設定 spd = 2; // メーターMC と 人MC を停止 meter_mc.stop(); man_mc.stop(); // マウス監視用オブジェクト mouseObj を作成 var mouseObj = new Object(); // マウスが動いたときの動作を定義 mouseObj.onMouseMove = function() { // // もし 変数 mouseY1 が未定義であれば if (mouseY1 == undefined) { // mouseY1に マウスの y 座標を代入 mouseY1 = _root._ymouse; // もし 変数 mouseY1 が定義済であれば } else { // 変数 mouseY2 に mouseY1 の値を保管(旧マウス座標) mouseY2 = mouseY1; // そして mouseY1に マウスの y 座標を代入(新マウス座標) mouseY1 = _root._ymouse; // // 新マウス座標が旧マウス座標より大きい場合 if (mouseY1>mouseY2) { // メーターMC に 1フレーム進む時間毎に随時実行する動作を定義 meter_mc.onEnterFrame = function() { // // もし メーターMC の再生フレームが spd より大きい場合 if (meter_mc._currentframe>spd) { // 人MC を再生 man_mc.play(); // メーターMC をspdのフレーム数分逆生成 meter_mc.gotoAndStop(meter_mc._currentframe-spd); // メーターMC の再生フレームが 1 であれば } else { // メーターMC をフレーム1で停止 meter_mc.gotoAndStop(1); // 人MC をフレーム1で停止 man_mc.gotoAndStop(1); } }; // // 新マウス座標が旧マウス座標より小さい場合 } else if (mouseY1<mouseY2) { // メーターMC の 1フレーム進む時間毎に随時実行する動作を削除 delete meter_mc.onEnterFrame; // 人MC をフレーム1で停止 man_mc.gotoAndStop(1); // 新旧マウス座標の差分だけ meter_mc のフレームを進める meter_mc.gotoAndStop(meter_mc._currentframe+mouseY2-mouseY1); } } }; // Mouseクラスのリスナーとして mouseObj を登録 Mouse.addListener(mouseObj); -------------------------------------------- (ActionScript1.0 Flash MX 以上で使用可能) ゼンマイですが, これはムービークリップの中でくるくる回るアニメーションを作成するのではなくて, グラフィックインスタンスの中で1回転するアニメーションを作成します。 そして,そのゼンマイが1回転するアニメが入ったグラフィックインスタンスを 「meter_mc」 の中に入れます。 そしてそのタイムラインを伸ばして, ゼンマイグラフィックインスタンスを選択した状態で, プロパティインスペクタから再生方法を 「ループ」 に指定すれば, 「meter_mc」 のタイムラインと同期して動くインスタンスが容易に作成できます。 「meter_mc」 の中に,ゼンマイが回転するムービークリップを入れた場合はこれができません。 ムービークリップではなくグラフィックインスタンスを使用する所がポイントです。 また, 「meter_mc」 の中のタイムラインを直接使うと, ゼンマイを何回転も何回転もさせなければならなくなりますから, かなり面倒ですし,位置を変えるのも一苦労になります。
お礼
遅くなってしまってすみません。 ご回答ありがとうございました!お陰さまで無事アニメーションを作ることができました!!(回答をいただくまでは、絶対に出来ないと思っていたので、感動してPCの前で「おぉーっ動いた!!!」とか叫んでました笑") 本当に助かりました。説明も丁寧に書いてくださってわかりやすかったです。これからまたFlashを勉強する時にも参考にさせていただきます。ありがとうございました!