2012-02-23 2 views
1

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 

결과? 양식은 마지막 원을 지우지 않고 연속적으로 그려집니다. 이것은 당신이 함께 구체의 '라인'을 가지게된다는 것을 의미합니다.

명확히하려면 X는 물론이고, 상기 X 좌표 는 Y Y- Y-좌표

이다

X_Dir은 정수, 그것이 다음 번 루프 반복하도록 루프의 각 반복에 첨가하고, 그것은 다른 위치에있을 것입니다; Y_Dir은 Y Coord와 동일하지만 동일합니다.

CollisionDetect()가 비어 있습니다. 그것은 아직 채워지지 않습니다, 그것은 형태의 측면과 충돌을 처리합니다. W, H는 각각 너비와 높이입니다.

아이디어가 있으십니까?

+0

.Net으로 이식 할 때 CLS 방법이 부적절하다는 것은 나쁘다. 그렇지 않으면 나는 제안 할 것이다. – N0Alias

답변

0

일반적으로 Paint 이벤트가 발생하면 페인팅이 수행됩니다. 양식에 원하는 배경색을 가진 Panel 컨트롤을 추가하십시오. 그릴 전에 패널

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 

패널의 Paint 이벤트를 처리 항상 자동으로 삭제됩니다.

변경 Paint 이벤트 패널은 예를 들어, 다른 형태로 숨겨진 된 경우, 자동으로 발사하고,이 것을

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 

참고 타이머 틱 이벤트 핸들러는 다시 그려야합니다. 컴퓨터가 사용 중이며 페인트 할 수없는 경우 일부 페인트 이벤트는 건너 뛸 수 있습니다. 따라서 게임 로직 (계산)을 Timer1_Tick에 유지하십시오. 폼에 직접 그리는 것을 선호하는 경우


, 당신은 할 수있는 패널의 페인트 이벤트 대신 폼의 Paint 이벤트를 사용하여 대신 Panel1.Invalidate()Me.Invalidate()를 호출.

+0

사각형을 그립니? 예를 들어주세요 – Azerty560

+0

Timer1.tick의 끝 부분에있는 것과 같은 의미입니까, 끝 부분에 사각형을 그립니 까? – Azerty560

+0

감사합니다. 이것은 매우 유용했습니다! : D – Azerty560

관련 문제