| Name |
由貴
|
| Date |
2008年12月26日 (金) 15時39分 |
| Message |
皆さん、初めまして。
由貴と申します。
早速ですが、質問させて頂きたいと思います。
私は今フラッシュサイトを作っているのですが、メニューボタンを上からボールが落下するように作りたいのです。
ただ落下するのではなく、落下してバウンドするんですけれど、どんどんバウンドする高さが低くなり、最後には停止するというものを作りたいんですけれども、知識不足で調べてもよくわかりません。
どうか、知恵を貸して下さい。
失礼します。 |
Response
01
|
|
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つとも同時に同じバウンドをします。
<関連記事>
ボール同士が衝突する例
■マスク画像同士の衝突
|
|