アクションゲーム講座 第一回

アクションゲーム講座
第一回
この講座は
• マリオのような簡単な2Dアクションゲームを
製作します。
この講座は
• 今までの講座と違い、
ソースコードを配布してその中身の解説を行う
• 自分で読み込んで、自由に改変してみよう!
• ソースコードをもらっていない人はここで挙手!
本日のメニュー
•2Dマップについて
•ジャンプについて
•当たり判定(衝突修正)について
その前に!
•C言語講座の内容は覚えていますか?
•関数自作、プロトタイプ宣言、配列etc…
•ソースコードや過去の講座資料を見ながら
よく復習しましょう。
2Dマップについて
まあ、まずは動かしてみて
• 配布したZIPを解凍→action_kouza1.slnを開く
• そのままCtrl+F5でコンパイルして実行!
• 左右キーとZキーで操作、ジョニー君が動く!
• DXライブラリの初期設定は要らないヨ
map.cppに注目!
• プロジェクトの中のmap.cppを開いてみよう!
• 気持ち悪い二次配列が拝めます
マップはゲームの基本のキ
• 配列の0と1がゲームのマップに対応しています!
• ここを変えると自分の好きなマップができる!
• RPGでも使うのでよく覚えておこう!
対応
マップチップのサイズ
• 今回のマップは1マスが32x32ピクセルのサイズでできています。
• この1マスをマップチップなんて言ったりします。
• ジョニー君はこのマップチップと当たり判定をしています。
マップまとめ
配列を使って
マップを作る!
アクション以外にも使えます
ジャンプについて
ちょっと復習
• DXライブラリのウインドウの原点は左上です!
• DXライブラリはY軸の正負の方向が反転しています!
ジョニー君のジャンプの流れ
①Zボタンが押されるとY軸の上方向(負の方向)に移動量が増加
JUMPFLAGが1になり、飛んでる間はジャンプできないようにする。
ジョニー君のジャンプの流れ
②飛んでいる間は重力が加えられ、上方向への移動量が減っていく
ジョニー君のジャンプの流れ
③そのうち移動方向が上から下になる
ジョニー君のジャンプの流れ
④地面に着地すると移動量が0になり、重力も加えられなくなる。
JUMPFLAGが0になり、またジャンプできるようになる。
ジョニー君のジャンプの流れ
ジョニー君の頭がマップチップにぶつかると、その時点で移動量が
0になる。
(でもJUMPFLAGは1なので、重力は加え続けられるよ!)
ジャンプまとめ
ジャンプをするときは
重力を使う!
アクションゲームに重力は不可欠です!
当たり判定(衝突修正)に
ついて
ジョニー君の動きは少し複雑
• ジョニー君はこれまでの丸や四角のようにただ動いているわけでは
ありません。
• 相当ビビりながら動いてます。
ジョニー君の動き
①ジョニー君はまず上下方向から動きます。
Y軸方向の移動量に従って仮移動します。
ジョニー君の動き
②仮移動したところで、ジョニー君の四角の四隅がマップチップに
当たっていないかを調べます。
ジョニー君の動き
③当たっていれば、然るべき場所に移ります。
当たっていなければそのままです。
ジョニー君の動き
④次にそこから左右方向に仮移動します。
ジョニー君の動き
④仮移動したところで、再びジョニー君の四角の四隅がマップチップに
当たっていないかを調べます。
ジョニー君の動き
⑤当たっていれば、然るべき場所に移ります。
当たっていなければそのままです。
なんで四隅で判定するの?
• 片方だけ接触している場合があるから
• 比べるものより自分が大きい場合、すり抜けることもあるので、
その時は、方法を変える必要がある。
条件式の+1とか-1とかって何?
• 判定基準が四角の内側になるので、そのための補正。
• 左上ならX方向に+1、Y方向に+1、右上ならX方向に-1、Y方向に+1
左下ならX方向に+1、Y方向に-1、左下ならX方向に-1、Y方向に-1
の座標で当たり判定を行う
Q.もしも+1と-1を取っ払ってしまうと・・・?
Q.何で判定基準が内側になるのか、考えてみよう
当たり判定まとめ
当たり判定は
四隅で!
条件式に要注意!
ただし注意
• この方法はマップチップもプレーヤーも四角の時のみ有効
→キャラの形が変わったり地形が複雑になると
条件がまるっきり変わってしまうので気を付けよう!
次回予告
マップ移動について
次回は9月6日です
後日今回のソースコード詳細解説を載せます