トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     スクリプトで尾をひく物体のアニメーション
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
旭日ゆうほ
Åê¹ÆNo.8538
投稿日時: 2004-6-23 19:16
Bak@Fla名人
居住地: 心は岡山
投稿: 91
使用環境:
Windows Vista Home Premium
Flash MX2004 v7.2
Flex2 SDK
Flex3 SDK
FlashDevelop3.0.0 Beta7
スクリプトで尾をひく物体のアニメーション
初投稿です。よろしくお願いします。

彗星や、火の玉のような
尾をひく物体のアニメーションを作ろうと思い、
以下の方法で作りました。

5つのムービークリップを置き、
仮にそれらのムービークリップのインスタンス名を
H1, H2, H3, H4, H5 とします。

H1 のスクリプト
onClipEvent (load) {
    xSpeed = 0;
    ySpeed = 0;
    xHozon = _x;
    yHozon = _y;
}
onClipEvent (enterFrame) {
    //マウスカーソルを追いかける
    if (_x<_parent._xmouse) {
        if (xSpeed<10) {
            xSpeed += 1;
        }
    }
    if (_x>=_parent._xmouse) {
        if (xSpeed>-10) {
            xSpeed -= 1;
        }
    }
    if (_y<_parent._ymouse) {
        if (ySpeed<10) {
            ySpeed += 1;
        }
    }
    if (_y>=_parent._ymouse) {
        if (ySpeed>-10) {
            ySpeed -= 1;
        }
    }
    //位置を保存する
    xHozon = _x;
    yHozon = _y;
    //物体の移動
    _x += xSpeed;
    _y += ySpeed;
}


H2 のスクリプト
onClipEvent (load) {
    xHozon = _x;
    yHozon = _y;
}
onClipEvent (enterFrame) {
    //位置の保存
    xHozon = _x;
    yHozon = _y;
    // H1 の保存された位置に移動
    _x = _parent.H1.xHozon;
    _y = _parent.H1.yHozon;
}

H3 以降のスクリプトは H2 のスクリプトの「 H1 」の部分をそれぞれに対応したものに書き換える。

できたもの

実際動かしてみると、
物体のスピードが速くなると、
それぞれ独立した丸い物体が見えてしまい、
彗星のように尾をひいているとはいいがたいものになりました・・・

一つながりの尾をひく物体のアニメーションを作るには、
どのような改良を加えればいいのでしょうか?
もしくは、また別の方法があるのでしょうか?
教えてください


----------------
旭日ゆうほ
swf置いてます。AM902

空野大二郎
Åê¹ÆNo.8542
投稿日時: 2004-6-24 2:01
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: スクリプトで尾をひく物体のアニメーション
まいど。

火の玉の尾が、しっぽらしくなるように、というわけですね。
引用:

旭日ゆうほさんは書きました:
彗星や、火の玉のような
尾をひく物体のアニメーションを作ろうと思い、
以下の方法で作りました。


尾は本体から距離を離れるほど細く長くなるのだから、そのように作ればよいわけですね。
思いついたことは下記の3つ。
1:H2以降をムービークリップの中心に置いて、タテを縮めてヨコ長のだ円にする。(ムービークリップで)
2:追従するムービークリップ(H1)の方向を向く。(スクリプト)
3:追従するムービークリップからの距離を測り、自身のヨコの長さを変更。(スクリプト)

H2に下記のスクリプトを記述。
onClipEvent (load) {
    xHozon = _x;
    yHozon = _y;
}
onClipEvent (enterFrame) {
	//H1の方向を向く
	//H1と自分との距離を測って、その値でアークタンジェントを求める
	//それがH1の方向
	mX = _parent.H1.xHozon - _x;
	mY = _parent.H1.yHozon - _y;
	_rotation = Math.atan2(mY, mX)*180/Math.PI;
	//H1との距離を測って、自身の長さを決める
	//H1との絶対値を求める
	disX = Math.abs(mX);
	disY = Math.abs(mY);
	disH = Math.sqrt(Math.pow(disX, 2) + Math.pow(disY, 2));//三角形の2辺の距離を2乗して、その和から平方根を求める
	_xscale = disH * 10;
    //位置の保存
   xHozon = _x;
   yHozon = _y;
    // H1 の保存された位置に移動
    _x = _parent.H1.xHozon;
    _y = _parent.H1.yHozon;
}

H3以降も、旭日さんのスクリプト同様に、mX,mYの「H1」の部分を追従元のムービークリップ名に書き換える。

スクリプトでらしく見せるのはここまででしょう。
あとは、見せようとする尾に似せるべく、色や重なり順を変えるくらいです。


----------------
空野 大二郎 アニメーター作家
桜の道

旭日ゆうほ
Åê¹ÆNo.8561
投稿日時: 2004-6-24 18:03
Bak@Fla名人
居住地: 心は岡山
投稿: 91
使用環境:
Windows Vista Home Premium
Flash MX2004 v7.2
Flex2 SDK
Flex3 SDK
FlashDevelop3.0.0 Beta7
Re: スクリプトで尾をひく物体のアニメーション
空野大二郎様、
丁寧なお答え、ありがとうございます

二つのムービークリップの間を埋める方法として、
横の長さを伸ばすとは、考えましたが、
二つのムービークリップの距離を測って、
それに応じて横の長さを変化させ、
そして、追従するムービークリップの方向へ
向きを変えればよかったのですね。
目から鱗でした
引用:

空野大二郎さんは書きました:
1:H2以降をムービークリップの中心に置いて、タテを縮めてヨコ長のだ円にする。(ムービークリップで)
2:追従するムービークリップ(H1)の方向を向く。(スクリプト)
3:追従するムービークリップからの距離を測り、自身のヨコの長さを変更。(スクリプト)


提示していただいたスクリプトを参考に、
いろいろ調節した結果、ずいぶんイメージに近づきました

改良前後

大変勉強になりました。
本当にありがとうございました


----------------
旭日ゆうほ
swf置いてます。AM902

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops