2012-02-23 156 views
1

我想在VB網絡中創建一個簡單的彈性球應用程序; 我正在使用計時器和FillEllipse()方法來嘗試廣告在計時器的每個滴答時間創建一個新的圈子。 代碼:VB.NET如何清除表單的背景

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
     Dim Gr As Graphics = Me.CreateGraphics 

     Gr.FillEllipse(Brushes.Teal, X, Y, W, H) 
     CollisionDetect() 
     X = X + X_Dir 
     Y = Y + Y_Dir 

     Gr.Dispose() 

    End Sub 

結果呢?表格連續繪製自己,而不清除最後一個圓圈。這意味着你最終會在一起形成一個「線條」。

澄清: X爲良好,在X COORDS Y是Y- Y型COORDS

X_Dir是整數,它被添加到循環的每次迭代,以便下一次循環迭代,它將在不同的位置; Y_Dir與Y Coords相同;

CollisionDetect()爲空。它還有待填補,它將處理與表格兩側的碰撞。 W,H分別是寬度和高度。

想法?

+0

當移植到.Net時,CLS方法被拒絕,否則我會建議。 – N0Alias 2012-02-23 22:38:35

回答

0

通常繪畫是在Paint事件觸發時完成的。將具有所需背景色的Panel控件添加到您的表單中。處理Paint事件的面板

Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint 
    e.Graphics.FillEllipse(Brushes.Teal, X, Y, W, H) 
End Sub 

專家組將始終在繪製之前自動清零。

更改計時器滴答事件處理程序

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    Panel1.Invalidate() ' This triggers the Paint event 
    CollisionDetect() 
    X = X + X_Dir 
    Y = Y + Y_Dir 
End Sub 

注意,Paint事件被自動解僱,如果面板是由另一種形式隱蔽,例如,具有重繪。如果電腦繁忙併且無法繪畫,則可能會跳過一些繪畫事件。因此請保持您的遊戲邏輯(計算)在Timer1_Tick


如果你更喜歡直接在窗體上畫,你可以通過使用窗體的Paint事件,而不是在面板的油漆事件,並通過調用Me.Invalidate()而不是Panel1.Invalidate()

+0

畫一個矩形?一個例子請 – Azerty560 2012-02-23 22:25:04

+0

你的意思是像在Timer1.tick的結尾處,我在它的最後畫一個矩形? – Azerty560 2012-02-23 22:25:32

+0

謝謝,這非常有用! :D – Azerty560 2012-02-23 22:38:29