2014-09-19 44 views
0

我有代碼,使11個圓形對象的列表,並將它們繪製到VB窗體中的圖片框。他們應該穿過它,當他們到達最後,重新開始。 圓圈填充正確,並按照它們應有的移動,但兩個週期後,一旦它們到達末端,它們消失,不會重置爲開始。這是我目前使用的代碼。繪製的物體在設定時間後消失。 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

您是否調試過並遵循代碼並查看發生了什麼? – OneFineDay 2014-09-19 17:51:55

+0

我會在'Rnd'函數上使用'Random'類。 – OneFineDay 2014-09-19 17:53:17

+0

當消失發生時,我在調試模式下運行它。沒有錯誤彈出。 最好使用隨機? – CMacDady 2014-09-19 18:16:55

回答

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.

這個問題變得很難診斷(儘管調試器可以很容易地顯示你),因爲你使用了一個「幻數」 。 640實際上不是圖片框的大小。所以你不能看到他們被卡住了。切勿使用幻數。 PictureBox.ClientSize.Width是要使用的正確值,減去對象大小。不要硬編碼,在「視網膜」顯示屏上輸入一些灰塵。

+0

感謝你們總結了一切,一旦我想要的東西都運行起來,我就回去修復魔術數字 我遇到過這個問題已經有好幾次了,這似乎讓我有些困惑。 – CMacDady 2014-09-19 19:15:09