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

如何在C#Visual Studio 2010中继续移动PictureBox,c#,screensaver,bounce,C#,Screensaver,Bounce,我正在使用C#在VisualStudio2010中编写一个跳跃式徽标屏幕保护程序。在今天之前,我从未用C#写过文章,所以我为自己对高级语言的无知道歉。我正在使用PictureBox将图像导入表单。有没有办法找到PictureBox的边界,以便我可以将其与屏幕的边界进行比较(使用screen.Bounds作为屏幕边界)?正如我所说,我以前从未用C#编程过,所以我不确定您还需要哪些其他细节(如果有的话)。请让我知道,我会尽我所能。多谢各位 编辑: 我的bounce方法是用公共部分类Screensav

我正在使用C#在VisualStudio2010中编写一个跳跃式徽标屏幕保护程序。在今天之前,我从未用C#写过文章,所以我为自己对高级语言的无知道歉。我正在使用PictureBox将图像导入表单。有没有办法找到PictureBox的边界,以便我可以将其与屏幕的边界进行比较(使用screen.Bounds作为屏幕边界)?正如我所说,我以前从未用C#编程过,所以我不确定您还需要哪些其他细节(如果有的话)。请让我知道,我会尽我所能。多谢各位

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

您的picturebox将以一种形式存在。picturebox有一个边界,它为您提供相对于包含它的表单的顶部、左侧、右侧和底部值。在此基础上,您可以轻松计算picturebox是否完全位于表单内,或者是否使用Forms width和height属性(假设左上角为0,0)。移动picturebox时,请检查以确保即将进行的移动将使picturebox保持在表单中。

除非我遗漏了什么

将屏幕边界设置为
矩形

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

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

除了Tony的精彩建议,我还想谈谈如何处理碰撞:

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

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

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


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

我知道你没有用c#编程,但你至少需要向我们展示你所做的尝试/谷歌编辑似乎我已经超越了自己。我试过测试PictureBox.Bounds.Top==this.Bounds.Top,但我刚刚意识到我的移动方法不起作用。我以为我在创建一个点(x,y),但我似乎做得不正确。只是修复了该点。将返回并测试。经过一些测试,它看起来像picturebox.bounds.top==this.bounds.top已关闭。而不是这样,我需要使用帧的边界。bounce方法的代码和帧的创建在不同的位置完成。bounce方法是cr在公共部分类ScreensaverForm中创建,而帧是在静态类程序中创建的。如何从bounce方法访问帧属性?我需要知道它击中的边界,以便可以反转方向。有什么方法可以这样做吗?我可能误解了这一点,但这看起来似乎只告诉我是否在边界。这并不能告诉我我是否到达了某个特定的边界。如果你在边界内,如果你移动了,你就不会到达边界…取决于你是否知道你移动的方向,但是MyPictureBox.Location.X+MyPictureBox.Size.Width>Screen.bounds.Right或类似的。。。