2012-09-11 110 views
1

我最近嘗試在allegro 5中製作庫存系統,在這裏我繪製了20x20的方格網格並拖放了項目。問題是,我可以看到項下的我繪製的實際網格,這是一種不需要的效果。這裏是我的代碼:Allegro 5通過原始圖形繪製位圖

if(draw) 
     { 
      draw = false; 
      al_draw_bitmap(image, item.posx, item.posy, 0); 

      if(mouseKey) 
       { 
        grab = true; 
        item.posx = mouse.posx - (item.boundx-5); 
        item.posy = mouse.posy - (item.boundy-5); 
       } 

      else if(mouseKey == false && grab == true) 
      { 
       for(int i = 0; i < mouse.posx; i += 20) 
       { 
        if(i < mouse.posx) 
         item.posx = i; 
       } 
       for(int j = 0; j < mouse.posy; j += 20) 
       { 
        if(j < mouse.posy) 
        { 
         item.posy = j; 
        } 
       } 
       grab = false; 
      } 

      for(int i = 0; i <= width; i += 20) 
      { 
       al_draw_line(i, 0, i, height, al_map_rgb(0, 0, 0), 1); 
       al_draw_line(0, i, width, i, al_map_rgb(0, 0, 0), 1); 
      } 

      al_flip_display(); 
      al_clear_to_color(al_map_rgb(40,40,40)); 
     } 

(我知道這是可怕的書面和未優化的,但我寫在大約10分鐘只是作爲測試)

我怎樣才能使這樣的項目精靈不顯示在它上面的線?這裏是我的問題的一個例子,如果我太含糊:

My problem

我使用的代碼塊IDE在Windows XP

回答

2

除非你用OpenGL設置不甘示弱,你會總是得到的東西你最後在最上面繪製。所以在這種情況下,只需將al_draw_bitmap(image, item.posx, item.posy, 0);直接移動到al_flip_display()以上即可。

請注意,你將有一些問題,因爲你是在該節操縱item.posxitem.posy,所以你必須先緩存結果:

int x = item.posx; 
int y = item.posy; 

// ... 

al_draw_bitmap(image, x, y, 0); 
al_flip_display(); 

然而,這只是在更大的問題一個創可貼:你不應該改變繪圖塊內的任何東西。整個if/else塊應該在別處。即:

if (event timer is a game tick) 
{ 
    do all logic stuff 
    draw = true 
} 

if (draw) 
{ 
    do all drawing stuff 
    draw = false; 
} 
+0

我後來意識到這種情況正在發生,但你的答案是正確的,所以謝謝:) – Bugster