我为 2d 游戏制作了一个简单的 Tile 地图编辑器。
到目前为止一切正常,但有一点丑陋的事情。
如果我拖动瓷砖,它会从瓷砖的(顶部,左侧)拖动,但我想从点击位置拖动它。
toDrag.hitbox.X = ((int)cursorPos.X -(int)clickpos.X) + (int)campos.X; toDrag.hitbox.Y = ((int)cursorPos.Y -(int)clickpos.Y) + (int)campos.Y;
我该如何计算?
就像 Brainarts 建议的那样,您必须考虑光标的偏移量。
一些工作代码如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DoubleBuffered = true;
}
Rectangle myBox = new Rectangle(0, 0, 30, 30);
Point mouseDownPos = Point.Empty;
bool allowMove = false;
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (!myBox.Contains(e.Location))
return;
mouseDownPos = new Point(e.Location.X - myBox.Left, e.Location.Y - myBox.Top);
allowMove = true;
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
allowMove = false;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (!allowMove)
return;
myBox.Location = new Point(e.Location.X - mouseDownPos.X, e.Location.Y - mouseDownPos.Y);
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillRectangle(Brushes.Aquamarine, myBox);
}
}
考虑光标与图片框或矩形的偏移量,不同之处在于您需要使用什么来提供您想要的效果:)