-2

我为 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;

我该如何计算?

4

2 回答 2

1

就像 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);
        }
    }
于 2013-10-18T07:31:35.290 回答
0

考虑光标与图片框或矩形的偏移量,不同之处在于您需要使用什么来提供您想要的效果:)

于 2013-10-18T07:13:25.570 回答