VB.NET Как очистить фон формы - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь создать простое приложение для бодрых шаров в сети VB; Я использую таймер и метод FillEllipse (), чтобы попытаться создать новый круг при каждом тике таймера. Код:

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-координат;

CollisionDetect () Пусто. Это еще не заполнено, оно будет обрабатывать столкновения со сторонами форм. W, H - ширина и высота соответственно.

Идеи

1 Ответ

0 голосов
/ 24 февраля 2012

Обычно рисование выполняется, когда происходит событие 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.


Если вы предпочитаете рисовать непосредственно на форме, вы можете сделать это, используя событие рисования формы вместо события рисования панели извоните Me.Invalidate() вместо Panel1.Invalidate().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...