スーパーマリオブラザーズにおけるブロックの更新の実装
cs50のYoutube動画「スーパーマリオブラザーズにおけるブロックの更新の実装」について要点と要約をまとめました
3つの要点
- 要点1
ブロックの更新の実装には、衝突検出とブロックIDの交換が使用されます。 - 要点2
スーパーマリオブラザーズにおけるジャンプの衝突検出は他の方向と異なり、マリオの体の上部のみをチェックします。 - 要点3
コードはマリオの足と側面の衝突検出を追加しており、より正確なゲームプレイとブロックとの相互作用が可能になります。
要約
マリオのジャンプ能力を使用してゲームワールドでの更新をトリガーする方法
このセクションでは、特定のブロックをヒットすることでその外観を変更したり破壊したりするブロックの更新方法について探求します。マリオの頭がブロックと交差しているかどうかを衝突検出によってチェックし、そうであれば別のブロックとIDを交換してこの機能を示します。
スーパーマリオブラザーズにおける衝突検出
ジャンプ時のスーパーマリオブラザーズにおける衝突検出は他の方向と異なります。マリオの体の上部のみをチェックし、彼の頭がブロックと交差しているかどうかを確認します。彼の左上と右上のコーナーを見て、ワールドマップの特定のタイルにあるかどうかをチェックします。そうであれば、ブロックを他のブロックのIDに転送します。これにより、ジャンプ時の衝突検出が正確に行われます。
マリオの足と側面の衝突の更新
現在、マリオの足と側面の衝突検出はありません。次のセクションでは、これに対処するためにこれらの方向での衝突をチェックします。コードを変更して、特定のピクセル位置のタイルを取得できる新しい関数Map:tileAtを追加します。マリオのdyがゼロよりも小さいかどうかをチェックすることで、彼が上方にジャンプしているときにのみジャンプ衝突をチェックします。また、2つのブロックの間にいる可能性を考慮し、両方のコーナーを衝突チェックします。
ブロックの外観の変更とマップの更新
マリオがヒットしたときにブロックの外観を変更するために、左右の側面のタイルをチェックするためにtileAt関数を使用します。それらが空でない場合、マリオのdyをゼロに設定し、ブロックのIDをJUMP_BLOCK_HITに変更します。このIDの変更はフレームごとにレンダリングされ、ブロックをヒットして形状を変更したように見えます。コードを実行することで、ブロックをヒットするとマリオの速度が停止し、ブロックの外観が変化することがわかります。
▼今回の動画
編集後記
▼ライターの学び
ブロックの更新の実装方法やスーパーマリオブラザーズにおける衝突検出の違いについて学びました。
▼今日からやってみよう
今日から実際にゲーム開発やプログラミングに取り組んでみましょう!