プチコンのプ - 復活 - 跳ね返るボールの巻

卓球ゲームを作りたいという質問が目についたので、2Dのサンプルプログラムを作ってみました。
1
プチコンのプ。 @p4petitcom

まだちょっとだけ続くんじゃ。タッチパネルで、タッチした場所からボールが落ちるようにします。37と38は一行。 http://t.co/rea3MMu3d9

2014-05-17 00:04:48
拡大
プチコンのプ。 @p4petitcom

高いところからボールを落としていると、時々不自然な方向に弾むことがあります。V>=Rのとき、床にめり込んだ状態で判定することになり、縦と横のヒットが同時に発生しちゃうのです。

2014-05-17 00:08:14
プチコンのプ。 @p4petitcom

おちゃめさんの解説ではベクトルの外積を使うとあるけど、壁のベクトルデータを用意するのはおっくうである。HかVか、大きい方でHとVを割れば1ピクセルずつの移動になるから、めり込みは起きないんじゃないかな? プチコンの速度なら行けるはず!

2014-05-17 00:14:52
プチコンのプ。 @p4petitcom

では下準備に、ボールの移動を計算する部分を、サブルーチン化します。サブルーチンって何か? まあそれはあとで。

2014-05-18 08:17:16
プチコンのプ。 @p4petitcom

プログラムの終わりの、VSYNCとGOTO ◎MAINをコメントアウトして、代わりにRETURNを追加します。コメントアウトした文は、まだ消しません。69のXをチェックするIF文も一緒にコメントアウト。 http://t.co/bCEFGo2U7W

2014-05-18 08:21:55
拡大

ボール移動をサブルーチン化

プチコンのプ。 @p4petitcom

コメントアウトした文を、コピー&ペーストでSPOFSとボール ススムの間(46〜50)に移します。ボール ススムの頭に◎BALLFWとラベルをつけ、これを40のGOSUB文で呼び出します。 http://t.co/emrxnJNXMI

2014-05-18 08:27:42
拡大
プチコンのプ。 @p4petitcom

元通り、ボールがはずんだらサブルーチン化完了。ここではまだ、ボールの弾む向きがおかしいバグは取れません。

2014-05-18 08:29:32
プチコンのプ。 @p4petitcom

40行のGOSUB文を実行すると、プログラムは56行のラベル◎BALLFWに飛びます。その後最後のRETURNに当たったら、プログラムは41行、元のGOSUBの次の文に戻ってきます。これがサブルーチン。

2014-05-18 08:34:50
プチコンのプ。 @p4petitcom

ラベル名BALLFWはBALL FORWARDの略で、つまりボール ススム。

2014-05-18 08:36:38
プチコンのプ。 @p4petitcom

まだサブルーチン化のメリットは見えませんが、実はさりげなく実行順序を変えています。もともとBALLFWにあたるルーチンはSPOFSのあとにありました。

2014-05-18 08:39:19
プチコンのプ。 @p4petitcom

1.ボール表示→2.移動先計算→3.画面外チェック(終了)、という流れの、1と2を逆にする変更がGOSUB文の位置だけでできるという小さなメリット。

2014-05-18 08:44:06

1ピクセル単位で動かせばめり込まない!

プチコンのプ。 @p4petitcom

この◎BALLFWサブルーチンを、HかVの大きい方の回数Tだけ繰り返して、1ピクセル移動するたびに衝突判定を繰り返すことで、壁にめり込むのを予防します。 http://t.co/z3SnRfaeik

2014-05-18 20:01:33
拡大
プチコンのプ。 @p4petitcom

BALLFWサブルーチンにも修正が必要になります。76と83〜90の、衝突のあったところでTHとTVの値を変えて、H,VをTで割り直します。 http://t.co/XqwDIVl7u2

2014-05-18 20:04:06
拡大
プチコンのプ。 @p4petitcom

まだ判定位置が◆で、円周が壁の角に当たっても何もない。ここはかすった動きになるから、またちょっと工夫がいりそう。

2014-05-18 20:08:50