我最近尝试在allegro 5制作库存系统,在那里我画了一个20x20的正方形网格和拖放项目。问题是,我可以看到项目精灵在下我绘制的实际网格,这是一个不想要的效果。这是我的代码:
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分钟的时间就把它写成了测试)
我怎样才能使项目精灵不显示它上面的线条?如果我太模糊,这是我的问题的一个例子:
我在Windows XP上使用Codeblocks IDE
答案 0 :(得分:2)
除非您使用OpenGL设置,否则您将始终获得最后绘制的内容。因此,在这种情况下,只需将al_draw_bitmap(image, item.posx, item.posy, 0);
移到al_flip_display()
的正上方。
请注意,由于您在该部分操作item.posx
和item.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;
}