我有一个代码,它创建了11个圆形对象的列表,并将它们绘制到VB窗体中的图片框中。它们应该穿过它,当它们到达终点时,在开始时重新启动。 圆圈正确填充,并按预期移动,但在两个循环后,一旦它们到达终点,它们就会消失,并且不会重置到开头。这是我目前正在使用的代码。
Public Class frmContent
Private chocolatemark As New List(Of circlemark)
Public Sub frmContent_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i As Integer = 0 To 10
chocolatemark.Add(New circlemark(Rnd() * 630 + 1, Rnd() * 220 + 140))
Next
End Sub
Private Sub rndGen_Tick(sender As Object, e As EventArgs) Handles rndGen.Tick
picturebox.Invalidate()
End Sub
Private Sub picturebox_Paint(sender As Object, e As PaintEventArgs) Handles picturebox.Paint
For i As Integer = 0 To 10
chocolatemark(i).update()
chocolatemark(i).draw(e)
Next
End Sub
End Class
Public Class circlemark
Private pos As Point = New Point(0, 0)
Sub New(ByVal x As Double, ByVal y As Double)
pos.X = x
pos.Y = y
End Sub
Public Sub draw(ByRef e As PaintEventArgs)
e.Graphics.DrawEllipse(Pens.Red, pos.X, pos.Y, 5, 5)
End Sub
Public Sub update()
If pos.X < 640 Then
pos.X += globalvalue.speed
End If
If pos.X > 640 Then
pos.X = 0
End If
End Sub
End Class
Public Class globalvalue
Public Shared speed As Integer = 5
End Class
有谁知道为什么会这样?
答案 0 :(得分:1)
If pos.X < 640 Then
pos.X += globalvalue.speed
End If
If pos.X > 640 Then
pos.X = 0
End If
你为物体创造了一个黑洞,一个他们永远无法逃脱的洞。一旦价值达到640,他们就会永远陷入困境。无法升高,无法回到0.它当然应该是> = 640。
这个问题变得难以诊断(尽管调试器可以很容易地向您显示),因为您使用了#34;幻数&#34;。 640实际上并不是图片框的大小。所以你无法看到被卡住了。永远不要使用幻数。 PictureBox.ClientSize.Width是要使用的正确值,减去对象大小。不要硬编码,否则会在视网膜上变成灰尘斑[&34;显示。