DXライブラリ シューティングゲームについて
今、趣味でDXライブラリのホームページにあるシューティングゲームの開発講座を見ながらプログラミングをしています。
弾を発射させるところで、少し理解ができない部分があったので、質問させてください。
まずはソースコードの一部を↓
int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC)
{
int YusyaX, YusyaY, YusyaGraph; // 自機の座標と画像
int YasuikiX, YasuikiY, YasuikiMuki, YasuikiGraph; // 敵の座標と画像と向き
int ShotX, ShotY, ShotFlag, ShotGraph; // 弾の座標と画像
// 画面モードの設定
SetGraphMode(640, 480, 16);
// グラフィックの描画先を裏画面にセット
SetDrawScreen(DX_SCREEN_BACK);
// 自機のグラフィックをメモリにロード&表示座標をセット
YusyaGraph = LoadGraph("media\\smp1_chara01.png");
YusyaX = 288; YusyaY = 400;
// 敵のグラフィックをメモリにロード&表示座標をセット
YasuikiGraph = LoadGraph("media\\smp1_chara02.png");
YasuikiX = 0; YasuikiY = 50;
// 弾のグラフィックをメモリにロード
ShotGraph = LoadGraph("media\\Shot.png");
// 弾が画面上に存在しているか保持する変数に『存在していない』を意味する0を代入しておく
ShotFlag = 0;
// 敵の移動方向をリセット
YasuikiMuki = 1;
// 移動ルーチン
while (1)
{
中略
// スペースキーを押して弾を発射
if (CheckHitKey(KEY_INPUT_SPACE) == 1 && ShotFlag == 0)
{
int Yuw, Yuh, Sw, Sh;
// 自機と弾の画像のサイズを得る
GetGraphSize(YusyaGraph, &Yuw, &Yuh);
GetGraphSize(ShotGraph, &Sw, &Sh);
// 弾の位置をセット、位置は勇者の中心にする
ShotX = (Yuw - Sw) / 2 + YusyaX;
ShotY = (Yuh - Sh) / 2 + YusyaY;
// 弾1は現時点を持って存在するので、存在状態を保持する変数に1を代入する
Shot1Flag = 1;
}
以下省略
上記のプログラムの「// 弾の位置をセット、位置は勇者の中心にする」の処理の意味が分かりません。
「// 自機と弾の画像のサイズを得る」と何か関係があるのは分かるのですが、どうしてこのような計算で自機の中心に弾が表示されるのかが分かりません。
どうか解説してください。よろしくお願いします。