gpt4 book ai didi

c++ - Allegro 5 在基元上绘制位图

转载 作者:行者123 更新时间:2023-11-30 04:25:02 24 4
gpt4 key购买 nike

我最近尝试在 allegro 5 中制作一个库存系统,我在其中绘制了一个 20x20 的正方形网格并在周围拖放项目。问题是,我可以看到项目 sprite 我绘制的实际网格下,这是一个不需要的效果。这是我的代码:

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 分钟内写了它只是为了测试)

我怎样才能使项目 Sprite 不显示它上面的线条?这是我的问题的一个例子,如果我太含糊的话:

My problem

我在 Windows XP 上使用 Codeblocks IDE

最佳答案

除非您修改 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();

但是,这只是解决更大问题的创可贴:您不应该更改绘图 block 中的任何内容。整个 if/else block 应该在其他地方。即:

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

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

关于c++ - Allegro 5 在基元上绘制位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com