2012-02-23 5 views
1

Я пытаюсь создать просто приложение bouncy ball в VB net; Я использую таймер и метод 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 

Результат? Форма непрерывно рисует на себе, не очищая последний круг. Это означает, что вы в итоге получаете «линию» сфер.

Для уточнения: Х хорошо, Х-Coords Y является Y- Y-Coords

X_Dir представляет собой целое число, оно добавляется к каждой итерации цикла поэтому в следующий раз итерации цикла, это будет в другом месте; Y_Dir - это то же самое, что и для Y Coords;

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

Идеи?

+0

Слишком плохо, метод CLS был лишен при переносе на .Net, иначе я бы предложил это. – N0Alias

ответ

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.


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

+0

Нарисуйте прямоугольник? Например, пожалуйста, – Azerty560

+0

Вы имеете в виду, как в конце Timer1.tick, я рисую прямоугольник в конце его? – Azerty560

+0

Спасибо, это было очень полезно! : D – Azerty560

Смежные вопросы