リフト その3
大改造のコードをいきなり本コードに混ぜるとコンパイルエラーの嵐で大変なので、とりあえずコンソールアプリとして試作品を作ってみました。
lift_test.cpp
上昇するリフトに自由落下してきたキャラクタが衝突するときの、それぞれのY座標を出力するプログラムになっています。
今回はキャラクタの位置を中央下部に設定してみましたが、まだX軸方向の移動がないのであんまり意味がないです。
実装としては、キャラクタを順に移動させ、マップの替わりにキャラクタのリストを使って当たり判定をします。
キャラクタの落下で衝突が発生した場合は衝突したキャラクタの上まで戻し、リフトの上昇で衝突した場合はキャラクタを押し上げます。
実際にはキャラクタの種類によって衝突時に処理は変わってきます。
今のところ、おおよそ次の四つの属性で分類できそうです。
- player
- enemyを踏める
- enemy
- playerにダメージ
- weapon
- enemyにダメージ
- block
- 乗れる
マリオの場合はこんな感じの対応になります。
player | enemy | weapon | block | |
---|---|---|---|---|
マリオ | ○ | × | × | × |
クリボー | × | ○ | × | × |
コウラ | × | ○ | ○ | × |
ブロックン | × | ○ | × | ○ |
ファイアボール | × | × | ○ | × |
ブロック | × | × | × | ○ |
キノコ | × | × | × | × |
これと当たり判定や攻撃範囲の有無、ブロックの衝突方向、衝突時のイベントなどのパラメータでキャラクタの差異が出てきます。
ひとまず、ここまで実装するのが目標です。