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

时间:2012-03-02 17:44:13

标签: c# screensaver bounce

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

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

3 个答案:

答案 0 :(得分:1)

除非我遗漏了什么。

将屏幕截图设为Rectangle

screenrectangle.Contains(new Rectangle(MyPictureBox.Location, MyPictureBox.Size))
如果它全部在屏幕上,

会给你真实的。

答案 1 :(得分:0)

您的图片框将以表格形式存在。图片框有一个Bounds,它提供相对于包含它的表单的top,left,right和bottom值。从那里,您可以使用表格宽度和高度属性轻松计算图片框是否完全在表格内,假设左上角是0,0。当你移动图片框时,你检查以确保你将要做的移动将图片框保留在表格中。

答案 2 :(得分:0)

除了托尼的出色建议外,我还想谈谈如何应对碰撞:

有四个边界,因此有四种情况需要检查。

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

此外,如果您的对象一次移动多个像素,则可能看不到确切的命中。 (就像你的盒子的x坐标直接从1移动到-1而不是0.所以你应该测试边界是是<或>> 边界,而不仅仅是测试on。

当您向特定边界移动时,仅检查碰撞也是一种好习惯。如果你不这样做,你的窗户可能会卡住,因为它在每次移动后都会碰到相同的边缘。