0

我的 winforms 程序有一堆盒子,它带有一个非常基本的碰撞检测器。用户可以在左键单击的任何位置添加框(因此它们确实经常重叠)。

问题:每当用户右键单击一个正方形时,(基于其他正方形的中心)一个正方形区域内的所有正方形都应该被删除。可悲的是,它似乎只在广场的左上角起作用。下半部分没有右键单击,右半部分也不会导致删除。最重要的是,它实际上比它应该删除的更远和更左。这是代码:

        if (e.Button == MouseButtons.Right)
        {
            foreach (MySquare square in squareList)
            {
                if (((MouseEventArgs)e).X - (dimensions / 2) <= square.XPosition & square.XPosition <= ((MouseEventArgs)e).X + (dimensions / 2))
                {
                    if (((MouseEventArgs)e).Y - (dimensions / 2) <= square.YPosition & square.YPosition <= ((MouseEventArgs)e).Y + (dimensions / 2))
                    {
                        deletionList.Add(square);
                    }
                }
            }

            foreach (MySquare square in deletionList)
            {
                squareList.Remove(square);
                counter--;
            }
        }

其中“维度”等于 20(可以更改,但它是初始值)。

我哪里出错了?

编辑:感谢 appclay,我现在知道它是基于左上角,而不是中心,坦率地说,这很有意义。因此,以防万一将来有人关心,这是工作代码:

        if (e.Button == MouseButtons.Right)
        {
            foreach (MySquare square in squareList)
            {
                if (((square.XPosition <= ((MouseEventArgs)e).X & ((MouseEventArgs)e).X - square.XPosition <= dimensions)))
                {
                    if (((MouseEventArgs)e).Y - dimensions <= square.YPosition & square.YPosition <= ((MouseEventArgs)e).Y)
                    {
                        deletionList.Add(square);
                    }
                }
            }

            foreach (MySquare square in deletionList)
            {
                squareList.Remove(square);
                counter--;
            }
        }
4

0 回答 0