2010-04-23 393 views
2

這裏是我的遊戲截圖。左邊是我的問題,看起來「舊畫」依然存在。在右邊是它應該是。C#WinForm的繪圖 - 如何清除和重繪

http://img682.imageshack.us/img682/1058/38995989.jpg

繪製代碼

 Graphics g = e.Graphics; 

     for (int i = 1; i < 27; i += 1) 
     { 
      for (int j = 0; j < 18; j += 1) 
      { 
       ZPoint zp = zpoints[i, j]; 

       if (zp != null) 
       { 
        g.DrawImage(zp.sprite_index, new Point(zp.x, zp.y)); 

        Image arrow; 
        if (zp.sprite_index == spr_green_zpoint) 
        { 
         arrow = spr_green_arrows[zp.image_index]; 
        } 
        else if (zp.sprite_index == spr_red_zpoint) 
        { 
         arrow = spr_red_arrows[zp.image_index]; 
        } 
        else 
        { 
         arrow = spr_grey_arrows[zp.image_index]; 
        } 

        g.DrawImage(arrow, new Point(zp.x - 4, zp.y - 4)); 
       } 
      } 
     } 

     if (latest_p1 != -1 && latest_p2 != -1) 
     { 
      ZPoint zp = zpoints[latest_p1, latest_p2]; 

      if (zp != null) 
      { 
       g.DrawImage(spr_focus, new Point(zp.x - 6, zp.y - 6)); 
      } 
     } 

回答

6

上有Control類的幾個方法處理重繪:

  • Invalidate - 此方法標記爲無效控制的特定區域,並且將重繪到下一個圖形操作
  • Update - 此方法觸發任何無效區域
  • 的重繪
  • Refresh - 此方法無效的控制的整個表面上,並立即重繪。相當於緊接着連續通話Invalidate()Update()
0

如果你的遊戲是永不服輸的時間操作系統可能不會畫的東西很好。 這就是完成繪圖工作的地方。如果您插入一個Invalidate()調用和一個「Thread.Sleep(0);」進入你的代碼,你希望它刷新它可能有幫助的屏幕。