マウスが四角形をクリックしたかどうかを確認するにはどうすればよいですか?私はマウスをクリックしたかどうかを確認するにはどのように矩形を作ったのですか?
Graphics gfx;
Rectangle hitbox;
hitbox = new hitbox(50,50,10,10);
//TIMER AT THE BOTTOM
gfx.Draw(System.Drawing.Pens.Black,hitbox);
マウスが四角形をクリックしたかどうかを確認するにはどうすればよいですか?私はマウスをクリックしたかどうかを確認するにはどのように矩形を作ったのですか?
Graphics gfx;
Rectangle hitbox;
hitbox = new hitbox(50,50,10,10);
//TIMER AT THE BOTTOM
gfx.Draw(System.Drawing.Pens.Black,hitbox);
だけでサンプルを迅速かつ汚い、あなたの "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";
}
}
}
ありがとう!おい!あなたは多くの手伝いをした – Kill4lyfe
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
}
'あなたは何をを参照してくださいgfx'のでしょうか? – Tommy
"gfx"がフォームから "e.Graphics ..."であれば、イベントMouseDownを使用してください。e.Xとe.Yがあります。 –
'control.CreateGraphics'を使用しないでください! 'Graphics'オブジェクトをキャッシュしないでください! 'Graphics.g = Graphics.FromImage(bmp)'を使って 'Bitmap bmp'に描画するか、' e.Graphics'パラメータを使ってコントロールの 'Paint'イベントに描画します。 – TaW