アプリ版:「スタンプのみでお礼する」機能のリリースについて

C#を習い始めて1か月のものです
某突破ゲーム作成サイトで記載されているプログラムで、PictureBoxではなくBitMapで処理を行いDrawImage同士の当たり判定を行いたいのですがうまく当たり判定が行えないのですが
public partial class Form1 : Form
{
  static Bitmap cavas = new Bitmap(563, 411);
Graphics gg = Graphics.FromImage(cavas);
Random rand = new Random();
int PH, PW; //自機のサイズ
int pxp; //自機の座標
Point Cpos; //カーソル座標
int[] kabeX = new int[2]; //壁の座標
int[] kabeY = new int[2];
int kabeW, kabeH; //壁のサイズ
Boolean Hitflg; //当たり判定
Boolean Shotflg;      //射出判定

---------中略---------

private void pBase_MouseDown(object sender, MouseEventArgs e)
{
Shotflg = true;
}

     //プレイヤの描画
     gg.DrawImage(pPlayer.Image, new Rectangle(Cpos.X, pxp, PW, PH));
     //壁の描画 
     gg.DrawImage(pKabe.Image, new Rectangle(kabeX[0], kabeY[0], kabeW, kabeH));

private void HitCheck()
{
for (int i = 0; i < 2; i++)
{
if ((Math.Abs(Cpos.X - kabeX[i]) < (PW + kabeW) / 2)
&& (Math.Abs(pxp - kabeY[i]) < (PH + kabeH) / 2))
{
Hitflg = true;
}
}
}

上記のプログラムで当たり判定を行っているのですが隙間が空いているところでも当たり判定が出てしまうのですがどこかおかしいでしょうか?
ちなみにMouseDownイベントでgg.DrawImage(pPlayer.Image, new Rectangle(Cpos.X, pxp, PW, PH))が飛ぶようなプログラムを組んであります

A 回答 (1件)

https://qiita.com/hp0me/items/57f901e9b0babe1a320e

それぞれの矩形の中心の座標で判定しないといけないと思いますが、
左上の座標で判定していませんか?

>int PH, PW; //自機のサイズ
>int[] kabeX = new int[2]; //壁の座標
>int[] kabeY = new int[2];
>int kabeW, kabeH; //壁のサイズ

座標はPointで、サイズはSizeで…とした方が別々の変数にするより良いかと思われます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!