如何在边界C#Visual Studio 2010中继续移动PictureBox

本文关键字:继续 移动 PictureBox 2010 Studio 边界 C#Visual | 更新日期: 2023-09-27 18:26:23

我正在使用C#在Visual Studio 2010中编写一个跳动的徽标屏幕保护程序。在今天之前,我从来没有用C#写过文章,所以我为之前的任何无知道歉。我正在使用PictureBox将图像导入表单。有没有办法找到PictureBox的边界,这样我就可以将其与屏幕的边界进行比较(使用screen.Bounds作为屏幕边界)?就像我说的,我以前从未用C#编程过,所以我不确定你还需要什么其他细节。请告诉我,我会尽我所能。非常感谢。

编辑:我的bounce方法是用公共分部类ScreensaverForm编写的。框架在静态类Program中。我在反弹方法中的边界检查是if(picturebox.Bounds.Bottom==this.Bounds.Bottom)。这似乎是在检查边界,但边界不是框架的边界。如何调用帧属性?

如何在边界C#Visual Studio 2010中继续移动PictureBox

除非我遗漏了什么。

获取屏幕边界作为Rectangle

screenrectangle.Contains(new Rectangle(MyPictureBox.Location, MyPictureBox.Size))

如果一切都在屏幕上,就会告诉你真相。

您的picturebox将存在于一个表单中。picturebox有一个Bounds,它为您提供相对于包含它的表单的顶部、左侧、右侧和底部值。从那里,您可以很容易地计算picturebox是否完全在表单中,或者是否使用Forms width和height属性,假设左上角为0,0。当你移动图片框时,你要检查以确保你要做的移动将使图片框保持在表单中。

除了Tony的出色建议外,我想谈谈如何处理碰撞:

有四个边界,所以有四种情况需要检查。

可以同时进行水平和垂直反弹!因此,独立跟踪水平和垂直速度,水平反弹只会影响水平运动。

此外,如果对象一次移动超过一个像素,则可能看不到准确的命中。(类似于长方体的x坐标直接从1移动到-1,而不为0。因此,您应该测试边界是在边界上还是在边界之上,而不仅仅是在上测试。

只有在向特定边界移动时才检查碰撞也是一种很好的做法。如果你不这样做,你的窗户可能会被卡住,因为每次移动后都会与同一边缘碰撞。