投稿
ASA fusuian
ボールのプログラム。 PONG的反射から物理シミュ的な動きを目指します!
13そうだね
プレイ済み
返信[1]
親投稿
ASA fusuian
リスト1。 BGで壁を作ったら一画面でおさまらなかった…
0そうだね
プレイ済み
返信[2]
親投稿
ASA fusuian
リスト2。
0そうだね
プレイ済み
返信[3]
親投稿
ASA fusuian
重力係数Gを導入。放物線の動きになります。
0そうだね
プレイ済み
返信[4]
親投稿
ASA fusuian
Gの値を変えるとボールの動きが変わりますが、0.5だと変な動きをしますね^^; あと0.4くらいだとボールが弾んでるうちになぜか天井に当たってしまう。これはひたすらVにGが足されていくのでどんどんスピードが上がってしまうんですね。 これは、床に当たったときに勢いが変わらないのがおかしい。
0そうだね
プレイ済み
返信[5]
親投稿
ASA fusuian
そこで反発係数Eを導入します。 これは値が小さいとじゅうたんやフトンみたいにボールがはずまなくなります。 でも困ったことに止まらない!BEEP 7がうるさいのでVによって2に変えましたがまだうるさいですね。
0そうだね
プレイ済み
返信[6]
親投稿
ASA fusuian
というわけで摩擦係数Cを導入します。 縦移動量Vが0のとき、ボールが転がっているとして、横移動量UからCを引きます。
0そうだね
プレイ済み
返信[7]
親投稿
ASA fusuian
とまで書いて気づいた、Cが大きいと逆に転がり出してしまう!w UがCより小さくなったら、Uを0にしなきゃいけない。 Vも同じ考えで、Eより小さくなったら0にしています。
0そうだね
プレイ済み
返信[8]
親投稿
ASA fusuian
本当は壁にも反発係数が必要ですね。 まあ今回はいいか。 次はボールをたくさん扱いたいですね。大改造の予感…
0そうだね
プレイ済み
返信[9]
親投稿
ASA fusuian
係数をグローバル変数として最初に宣言。 ボールのスプライトの設定をNEWBALL,ボールを動かす部分をBALLMOVEとして関数にします。 スプライト番号は0から引数Sに変更、移動量U,Vは配列に入れるのがセオリーですがここはSPVARに入れます。
0そうだね
プレイ済み
返信[10]
親投稿
ASA fusuian
BALLMOVE後半。 空中に浮いている状態を変数AIRに入れ、空中にあってVが0のボールがちゃんと落下するようにします。 あとボール増やしたらBEEPが超うるさいので削除。
0そうだね
プレイ済み
返信[11]
親投稿
ASA fusuian
BG設定のあたりは全く同じなのでスキップ。 メインルーチンはNEWBALLとBALLMOVEを10回呼び出すだけなのでシンプルになりました。
0そうだね
プレイ済み
返信[12]
親投稿
ASA fusuian
じゃらじゃらじゃらーん
0そうだね
プレイ済み
返信[13]
親投稿
ASA fusuian
これにボール同士の衝突を導入すればカンペキ! と思ったんですが、なかなか大変です。
0そうだね
プレイ済み
返信[14]
親投稿
ASA fusuian
ネットで見つけた衝突の数式をナントカBASICに落とし込んでみた。まずはベクトル演算関数から。
0そうだね
プレイ済み
返信[15]
親投稿
ASA fusuian
BALLHITでボールスプライトを全部なめて、SPHITSPがスプライト番号を返したら衝突方向計算関数VCOLLIを呼び出す仕組み。
0そうだね
プレイ済み
返信[16]
親投稿
ASA fusuian
メインループでBALLHITを呼ぶ。
0そうだね
プレイ済み
返信[17]
親投稿
ASA fusuian
ボールが衝突すると、もっともらしい方向に飛び散るけれど、どこか式展開に間違いがあるらしく衝突するほど勢いがついてそのうち画面から飛び出したりします…
0そうだね
プレイ済み
返信[18]
親投稿
ASA fusuian
計算式に元のベクトルを入れるの忘れてた!けっこういい?ボール同士の反発係数EBを追加。0.99とかでもいいかな?
0そうだね
プレイ済み
返信[19]
親投稿
ASA fusuian
ボールが重ならなくなったらもっとリアルになるかな? ジャイロで重力の方向を変えると面白いかも…でもそれやると壁との衝突計算が難儀かな?
0そうだね
プレイ済み