2012-09-11 40 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