设定时间后绘制的对象消失。 VB

时间:2014-09-19 17:25:41

标签: vb.net list oop drawing picturebox

我有一个代码,它创建了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

有谁知道为什么会这样?

1 个答案:

答案 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;显示。