2016-07-12 3 views
0

マウスが四角形をクリックしたかどうかを確認するにはどうすればよいですか?私はマウスをクリックしたかどうかを確認するにはどのように矩形を作ったのですか?

Graphics gfx; 
Rectangle hitbox; 
hitbox = new hitbox(50,50,10,10); 
//TIMER AT THE BOTTOM 
gfx.Draw(System.Drawing.Pens.Black,hitbox); 
+0

'あなたは何をを参照してくださいgfx'のでしょうか? – Tommy

+0

"gfx"がフォームから "e.Graphics ..."であれば、イベントMouseDownを使用してください。e.Xとe.Yがあります。 –

+0

'control.CreateGraphics'を使用しないでください! 'Graphics'オブジェクトをキャッシュしないでください! 'Graphics.g = Graphics.FromImage(bmp)'を使って 'Bitmap bmp'に描画するか、' e.Graphics'パラメータを使ってコントロールの 'Paint'イベントに描画します。 – TaW

答えて

2

だけでサンプルを迅速かつ汚い、あなたの "GFX" はフォームから "e.Graphicsを..." である場合:

public partial class Form1 : Form 
    { 
    private readonly Rectangle hitbox = new Rectangle(50, 50, 10, 10); 
    private readonly Pen pen = new Pen(Brushes.Black); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawRectangle(pen, hitbox); 
    } 

    private void Form1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if ((e.X > hitbox.X) && (e.X < hitbox.X + hitbox.Width) && 
      (e.Y > hitbox.Y) && (e.Y < hitbox.Y + hitbox.Height)) 
     { 
     Text = "HIT"; 
     } 
     else 
     { 
     Text = "NO"; 
     } 
    } 
    } 
+1

ありがとう!おい!あなたは多くの手伝いをした – Kill4lyfe

0

Rectangleは、いくつかの便利なものの見落とされがちな機能を持っています。この場合、Rectangle.Contains(Point)機能を使用すると、最適なソリューションです:

private void Form1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (hitbox.Contains(e.Location)) .. // clicked inside 
} 

ユーザーが簡単にシングルをヒットすることはできませんので、あなたは、を決めることになるでしょうアウトラインをクリックしたかどうかを確認するにはピクセル。このため

使用するかGraphicsPath.IsOutlineVisible(Point) ...

private void Form1_MouseDown(object sender, MouseEventArgs e) 
{ 
    GraphicsPath gp = new GraphicsPath(); 
    gp.AddRectanle(hitbox); 
    using (Pen pen = new Pen(Color.Black, 2f)) 
     if (gp.IsOutlineVisible(e.location), pen) .. // clicked on outline 

} 

..or長方形に固執..:

private void Form1_MouseDown(object sender, MouseEventArgs e) 
{ 
    Rectangle inner = hitbox; 
    Rectangle outer = hitbox; 
    inner.Inflate(-1, -1); // a two pixel 
    outer.Inflate(1, 1); // ..outline 

    if (outer.Contains(e.Location) && !innerContains(e.Location)) .. // clicked on outline 
} 
関連する問題