随机图片框位置 - VB.NET
Random Picturebox Location - VB.NET
我正在制作一个反应游戏,其中涉及用户单击随机化其位置的图片框。
棘手的部分是随机化图片框的位置,使其出现在我创建的面板的范围内。这样做的原因是我在表单上有其他控件。不确定面板是否是解决此问题的最佳方式,但我不确定从哪里开始。
图片框的大小为 (70,55),面板的大小为 (640,400),位置 (40,69) 如果有任何差异。
到目前为止我有以下代码:
Dim rnd1 As Integer = panel1.Width * Rnd()
Dim rnd2 As Integer = panel1.Height * Rnd()
pb1.Top = rnd2
pb1.left = rnd1
当它工作时,它会随机化面板边缘的图片框,这样一些随机化会导致图片框根本不可见。我必须使用什么代码才能使图片框完全可见并且不会越过面板的边界?
谢谢
您没有考虑 PictureBox 对象的高度或宽度。
如果您将图片框的左侧 属性 设置为面板的宽度,那么它将在视图之外。
你需要做这样的事情:
Dim rnd1 As Integer = (panel1.Width - pb1.Width) * Rnd()
Dim rnd2 As Integer = (panel1.Height - pb1.Height) * Rnd()
pb1.Top = rnd2
pb1.left = rnd1
注意:如果您使用 Rnd
,您需要先调用 Randmonize()
,否则每次您 运行 您的应用程序时,您的随机数将是相同的序列:Using Randomize() before Rnd() in VB.NET
我建议使用 Random
class 而不是 Rnd
因为这不需要您在开始使用之前初始化种子。
使用随机 class 生成您的随机数。参数是您要生成的最大数量。对于顶部位置,您生成一个介于 0 和面板高度减去图片框高度之间的数字。对于您的左侧位置,一个介于 0 和面板宽度减去图片框宽度之间的数字。
将其放入表单声明中。
Dim random As New Random
把这个放在你的事件中(我使用定时器事件)。
Dim newTop As Integer = random.Next(panel1.Height - pb1.Height)
Dim newLeft As Integer = random.Next(panel1.Width - pb1.Width)
pb1.Top = newTop
pb1.Left = newLeft
我正在制作一个反应游戏,其中涉及用户单击随机化其位置的图片框。
棘手的部分是随机化图片框的位置,使其出现在我创建的面板的范围内。这样做的原因是我在表单上有其他控件。不确定面板是否是解决此问题的最佳方式,但我不确定从哪里开始。
图片框的大小为 (70,55),面板的大小为 (640,400),位置 (40,69) 如果有任何差异。
到目前为止我有以下代码:
Dim rnd1 As Integer = panel1.Width * Rnd()
Dim rnd2 As Integer = panel1.Height * Rnd()
pb1.Top = rnd2
pb1.left = rnd1
当它工作时,它会随机化面板边缘的图片框,这样一些随机化会导致图片框根本不可见。我必须使用什么代码才能使图片框完全可见并且不会越过面板的边界?
谢谢
您没有考虑 PictureBox 对象的高度或宽度。
如果您将图片框的左侧 属性 设置为面板的宽度,那么它将在视图之外。
你需要做这样的事情:
Dim rnd1 As Integer = (panel1.Width - pb1.Width) * Rnd()
Dim rnd2 As Integer = (panel1.Height - pb1.Height) * Rnd()
pb1.Top = rnd2
pb1.left = rnd1
注意:如果您使用 Rnd
,您需要先调用 Randmonize()
,否则每次您 运行 您的应用程序时,您的随机数将是相同的序列:Using Randomize() before Rnd() in VB.NET
我建议使用 Random
class 而不是 Rnd
因为这不需要您在开始使用之前初始化种子。
使用随机 class 生成您的随机数。参数是您要生成的最大数量。对于顶部位置,您生成一个介于 0 和面板高度减去图片框高度之间的数字。对于您的左侧位置,一个介于 0 和面板宽度减去图片框宽度之间的数字。
将其放入表单声明中。
Dim random As New Random
把这个放在你的事件中(我使用定时器事件)。
Dim newTop As Integer = random.Next(panel1.Height - pb1.Height)
Dim newLeft As Integer = random.Next(panel1.Width - pb1.Width)
pb1.Top = newTop
pb1.Left = newLeft