全体表示

[ リスト ]

ねずみ花火

泥み花火の画像を用意し
サイズを設定しやすいように加工し
回転しながら火花を出して移動させてみる
この状態で花火の回転は0度
火花は左に出ることにして0度
出る位置は三角関数で中心から
火花の出る位置までの距離を計算
それを半径とし初期角度もそれで計算
毎回計算しなくて良い様に固定
と仮定し設定してみる
まず600×600の表示サイズで
スプライトを追加
祖に編集でねずみ花火画像を中心位置
イメージ 1

イメージ 2


100,100(私の編集画像では)描画0,0で固定
左下のスプライトをWクリックして右に固定
そのスプライトのスクリプト
onClipEvent(load){
_x = 0;
_y = 0;
}

左上に表示 基本位置 何もしなくても同じ

火花の座標を計算
rad = Math.atan2(相手のy座標 - 自分のy座標, 相手のx座標 - 自分のx座標);
角度 = rad * 180 / Math.PI;
これをひとつの式に
deg = (Math.atan2(235 - 100,30 - 100) * 180 / Math.PI;
距離は
r =Math.sqrt((235 - 100)*(235 - 100)+(30 - 100)*(30 - 100));

中心を見やすいように表示中心300,300にして
濃い点させます
火花の出る位置がこの場合時計の位置にあり
そこから反時計回りに欠いてさせます
ねずみ花火が単純に回っているのと同じことですが
火花の出る位置と角度を習得するのに必要です(多分)
onClipEvent(load){
cx = 300;
cy = 300;
_x = cx ;
_y = cy ;
deg = 0;
deg1 =  Math.atan2((235 - 100),(30 - 100)) * 180 / Math.PI;
r =Math.sqrt((235 - 100)*(235 - 100)+(30 - 100)*(30 - 100));
x = Math.cos(deg1)*r + cx;
y = Math.sin(deg1)*r + cy;
}
中心部に花火の中心を表示

まずこれを反時計回りに回転させます
ラジアン = 角度 * Math.PI / 180;

まず角度を1度ずつ減らします
deg -- ;
_rotation = deg;

これで半時計回りの完成
onClipEvent(load){
cx = 300;
cy = 300;
_x = cx ;
_y = cy ;
deg = 0;
deg1 =  Math.atan2((30 - 100),(235 - 100)) * 180 / Math.PI;
ideg = deg1;
r =Math.sqrt((235 - 100)*(235 - 100)+(30 - 100)*(30 - 100));
x = Math.cos(deg1* Math.PI / 180)*r + cx;
y =  Math.sin(deg1* Math.PI / 180)*r + cy;
}

-
onClipEvent(enterFrame){
deg -- ;
_rotation = deg;
}
deg1とrはなんだ?
火花の出る位置を計算させています
_rotationの下にねずみ花火本体の動きに連動させる計算式を追加します
deg1 = deg + ideg ;
x = Math.cos(deg1* Math.PI / 180)*r + cx;
y =  Math.sin(deg1* Math.PI / 180)*r + cy;

x,yが火花に位置になるはずです(考えが正しければ)
あっているか確認するため火花用のスプライトをインスタンス名fireとして
ねずみ花火のスプライトより上の深度で固定しその編集で
背景と間違えない色を用いたテキストの●か適当な画像で(ワザとに大きくしました)設定します
ねずみ花火のスプライトの今説明したx,yを参照するのでインスタンス名をmouseとします
これで下準備の完成
mouseの
スクリプトを
onClipEvent(load){
_x = _root.mouse.x ;
_y = _root.mouse.y ;
-
onClipEvent(enterFrame){
_x = _root.mouse.x ;
_y = _root.mouse.y ;
}

これで中央で回転するねずみ花火に連動して回転するスプライトの白い円の画像(私の設定)
これでねずみ花火が出来上がりです
後はねずみ花火を移動させ花火の画像を火花らしく設定すればねずみ花火もどきが出来あがります(たぶん)

ふたつのスプライトの下に複製のスクリプト

count =1;
i = 1;
onEnterFrame = function(){
    count ++;
    if(count%5 == 0){                    //3フレームに1回
        namae = "block" + i;                //インスタンス名(block0,block2,block3〜と名づけられる)
        sindo = 1000+i;                    //深度(ASの深度1000,1001,1002〜に配置される)
        _root.fire.duplicateMovieClip(namae,sindo);        //上記の規則で複製する
        if(i > 14){i =1;}                //40個まで複製したら、変数iの値を1に戻す
        else{i ++;}
    }
};

このままでは火花が回転するので座標を固定するため
fireスプライトのスクリプトはload部のみ
回転の軌跡で火花部分が残るはずです
イメージ 3

目標は
イメージ 4





よしもとブログランキング

もっと見る

プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事