D0812261 メニューボタンを地面にバウンドするように落下させたい
Name 由貴
Date 2008年12月26日 (金) 15時39分
Message 皆さん、初めまして。
由貴と申します。



早速ですが、質問させて頂きたいと思います。
私は今フラッシュサイトを作っているのですが、メニューボタンを上からボールが落下するように作りたいのです。
ただ落下するのではなく、落下してバウンドするんですけれど、どんどんバウンドする高さが低くなり、最後には停止するというものを作りたいんですけれども、知識不足で調べてもよくわかりません。
どうか、知恵を貸して下さい。



失礼します。
Response 01
2008年12月27日 (土) 01時52分> joy   
由貴さん、
■ボールがバウンドするときに当たり判定 が回答となると思います。

尚、下には、ボタンとして、動くようにした、適当なサンプルを置いておきました。それぞれの丸MCボタンをクリックすると、URLにリンクします。
http://homepage2.nifty.com/joys/answers/bounce/bounce.html
Response 02
2008年12月28日 (日) 17時21分> 憲ちゃん   
joyさん、いつもありがとうございます。


ball03.fla ※Flash5仕様

「ball」MCのクリップアクションで・・・

 onClipEvent (load) { 最初に、初期設定
   this._y = dy = 0; ←自分の最初の位置及び仮のY座標値を設定
   spd = 5; ←初期速度:大きいほど落下速度が速い
   g = 2.5; ←重力(下に向けて移動する加速度):大きいほど重力が働く
   k = 0.9; ←跳ね返り係数(地面に衝突したときの減衰率):小さいほどバウンドが少ない
   t = 0.99; ←空気摩擦抵抗(動くたびに速度が落ちる割合):1で抵抗なし
   base = 250 - this._height/2; ←地面で跳ね返るときのY座標
 }
 onClipEvent (enterFrame) { 毎フレーム以下を繰り返し実行
   spd = spd * t + g; ←速度を空気抵抗分遅くしながら、重力を加算
   dy += spd; ←その速度を、仮のY座標に加算
   if (dy >= base) { その結果、地面より下の座標になれば
     dy = base; ←仮のY座標を地面の座標に設定して
     spd = -spd * k; ←跳ね返り係数で速度を減速し、移動方向を逆転
   }
   this._y = dy; ←自分のY座標を仮のY座標に配置
 }

このような考え方で、ボールがバウンドしながら地面に近づきます。
サンプルは、5つのボールを使用しており、それぞれ最初の高さをランダムに設定することで、
バラツキを表現しています。
また、各係数を5つ同時に同じ値に設定したいため、シーンのアクションレイヤーで・・・

 // 初期Y座標配置幅
 yPos = 300;
 // 初期速度
 spd = 5;
 // 重力
 g = 2.5;
 // 跳ね返り係数
 k = 0.9;
 // 空気抵抗
 t = 0.99;
 // 地面のY座標値
 base = 250;
 //
 this.stop();

このように記述し、各MCの load イベントで・・・

 onClipEvent (load) {
   this._y = dy = -Math.floor(Math.random()*_parent.yPos); ←初期のY座標をランダムに設定
   spd = _parent.spd;
   g = _parent.g;
   k = _parent.k;
   t = _parent.t;
   base = _parent.base-this._height/2;
 }

以上です。初期設定の値をいろいろ変化させることで、思いの動きを作ってください。
「REPLAY」ボタンは、バラツキの検証用です。

バラツキが必要ないときは、this._y = dy = 初期のY座標値 としてください。
5つとも同時に同じバウンドをします。

<関連記事>
ボール同士が衝突する例
■マスク画像同士の衝突

このページの先頭へ