プロジェクト19
コリジョンでステージを作成。 今回はボールをゴールまで運ぶという遊びにしてみたので、コリジョンでコースを作った。 コース作成中にコリジョンを抜けるバグに遭遇。調べてみたら、データの持ち方で発生することが分かった。 こちらはコードではなく、デー…
コリジョンがだいぶ良い感じになったので、いままでステージ範囲のチェックを座標で行っていたものを、コリジョンで行うように修正。 これでステージサイズの変更もより簡単に行えるようになった。
コリジョン判定でボールの速度が速いときに反射すると、コリジョンに当たっていないように見えてしまっていた。 これは反射させるときにコリジョンに当たる直前のフレームの位置で反射させていたから。 これを壁の位置から反射させるように変更した。 ちょっ…
コリジョン判定を修正し、一応使えるものとなった。 でもやっぱりちょっと端の部分で、反射するときにちょっと違和感が出る場合がある。 あと、テスト用にコリジョンデータを作るため、座標を入れていくのが思ったより面倒だった。 とはいえ、このためだけに…
コリジョン判定部分を実装中。 コリジョンの端の部分で問題があることが判明して、いろいろと調整中。 まったくコリジョンの無い部分で当たってしまうという問題は修正できたが、ぎりぎりの位置だと当たっていないように見えて当たってしまう場合がある。 厳…
ラインに変更したコリジョンはAABBのようにX軸、Y軸だけとして、斜めは無いことにした。 これでX座標、Y座標それぞれで判定すれば良いはず。 試しにX座標で判定を入れてみたら、一定条件下でうまくいった。 あとは条件を見直して場合分けして判定すればうま…
コリジョンの仕組みを変更するために、データ構造を変更。 さらに判定を実装する前に、まずはデバッグ描画から。 描画部分を実装しながら、判定も考えていたけど、けっこうややこしいことになりそう。
壁としてのコリジョンを矩形で持つようにして実装を進めていたが、このままだと問題が発生することが発覚。 ということで、今度はコリジョンをラインとして持つように変更中。 ボールがラインを超えるような動きのときに反発させればうまくいきそうだが、何…
ボールを動かす部分の実装。壁の反射はまだステージエリアの外壁のままでテスト。 うまくいかないと思ったら、コードが間違っていてエラーになっていた。 とりあえず、前回のときから動いていなかったようだ。 間違いを修正して、ボールは動くようにできた。…
ボールを引っ張る部分の実装。 サンプルとは変数を変えているので、まずはそこを修正。 その他、ゲームステート的な部分も変えているので、そちらの対応も行った。 とりあえず、引っ張る動作は出来たようだが、ボールを動かす処理はまだ変更前なので、ちゃん…
ステージエリアの壁も今回で実装する矩形の壁で判定することにした。 元のサンプルから座標を計算して、壁を描画してみたら、ずれていた。 おかしいなと思ってよく調べてみたら、ボールの半径分の計算を間違っていた。 思った以上に、今回はポカミスというか…
ボールが当たる壁は矩形としてデータを持つことにした。 ということで、矩形のデータ構造を用意して、適当にいくつか座標を設定。 当たり判定の実装前に問題をわかりやすくするために、矩形の描画から実装。
サンプルを書き換えて、新しいロジックを実装中。 実行してみたら、画面が動かないので、エラーになっているかとログを見てみたが、エラーは表示されていなかった。 どこかで無限ループになっているのかとブレークポイントをおいて実行してみたが、メインル…
サンプルコードを改造して、実行してみたが、正しく動作しなかった。 デバッガで確認しようと、Visual Studio Code からデバッグ実行しようとしたら、まだデバッグ用の環境設定していなかった。 最近は Python のコードを書いていたので、JavaScript でのデ…
リポジトリを作って、必要なサンプルコードをコピーしてGitHubに登録。 ここから作業開始。 まずはコードを整頓して自分に必要な部分だけを残していく。
チュートリアル本でボールアクションゲームの章を読み終わったので、今度は自分で実装してみるターン。 ボールの動きはそのままで、障害物の壁を追加してみることにする。 どうやって壁のデータを持って衝突判定に用いるかが重要な部分となる。 まずはサンプ…
チュートリアル本でCPUの思考ルーチンについて学ぶ。 どう実装しているのかなと思ったら、結局ランダムに選んでいるだけだった。 まあ、シンプルなルールのゲームだから、深くいろいろな思考ルーチンを組んでも全体的に変化を感じられないかも。 ふと思った…
チュートリアル本でボールが停止したかどうかの判定について学ぶ。 ボールの速度が一定以下になったら速度を0にして停止させていた。 この速度が一定以下のとき停止させるパラメータは大きすぎるといきなり止まったように見えてしまうし、小さすぎるとなかな…
チュートリアル本で複数のボールで、衝突するときの処理について学ぶ。 基本的にはすべてのボール同士で衝突するときの処理を行うことになる。 ちょっと気になったのは、順番に衝突処理を行っていくので、同時に複数のにぶつかった場合は、先に処理されるボ…
チュートリアル本でボール同士の衝突処理について学ぶ。 この本では衝突したときの処理は次のように行っていた。 (1).2つのボールの衝突前の速度の合計値を求める (2).2つのボールの中心座標を結ぶ線の角度を求める (3).それぞれのボールの速度を(1)の半分の…
チュートリアル本でボールを引っ張って離して飛ばすという処理について学ぶ。 アルゴリズム自体は特に難しいことは無かった。引っ張った方向と反対の速度を与えれば良いわけで。 それよりも、ユーザーにどこに飛ぶか分かりやすく表示するほうが実装は大変そ…
サンプルコードのボールの動きを学ぶ。 ボールは座標と速度のデータを持ち、壁にあたったときは速度を反転、速度を毎フレーム減らすことにより減速を表現している。 この手法は以前、自分でも実装したことがあるので、特に問題なく理解できた。
チュートリアル本で次のテーマはボールアクションゲーム。 ボールを引っ張って他のボールにぶつけるというもの。 テーマはボールの動き。移動や衝突したときの反発など。基本的にはビリヤードを再現かな。 ゲームエンジンを使えば物理エンジンも入っているか…