gpt4 book ai didi

c++ - 在 Allegro 5 的运行时更改基元的颜色

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:20 25 4
gpt4 key购买 nike

我正在编写一个 2D 对象编辑器,以便可以更快地为基本程序创建 UI。我根本没有使用任何位图。相反,我只是在游戏循环中绘制带有函数调用的原语。到目前为止一切都很好,但我想知道如何在运行时改变对象的颜色。

基本概念是我使用一个变量作为颜色,当用户调用改变该变量值的函数时,颜色也会改变。简单的。像这样的东西:

void runColor(){
ALLEGRO_COLOR color = NULL;

if(event.mouse.button&1)
color = al_map_rgb(255, 0, 0);
else
color = al_map_rgb(0, 255, 0);

al_draw_filled_rectangle(firstXval, firstYval, secondXval, secondYval, color);
}

不幸的是,这不起作用。当我使用类似的代码时,根本就没有绘制对象。没有编译错误,没有运行时错误,什么都没有。相反,这些对象没有颜色,因此是不可见的,尽管我已经验证它们实际上是被创建的。所以我猜这意味着颜色变量在某种程度上是正确的类型,但是当它被设置为等于函数返回的任何值时,它不会保留 al_map_rgb() 的值。我知道它必须返回一些东西,否则它就不能成为 al_draw 函数中的参数。

虽然我可以只写出导致不同绘图函数的 if else if 语句,但我宁愿只使用像上面这样的一小段简单代码,而不是一堆冗余的东西来解决本应简单的问题。我只是不想使用相当于胶带的代码。

所以我确定问题可能与我假设 al_map_rgb() 返回值 ALLEGRO_COLOR 有关,但我不知道。你们愿意提出一些建议吗?

最佳答案

首先,无需做出任何假设。正如您在 the manual 中看到的那样, al_map_rgb() 确实返回一个 ALLEGRO_COLOR 对象。

这段代码没有任何问题。 x,y 值不正确,目标位图不是您所期望的,或者您没有调用 al_flip_display()。请务必在每一帧(即每次 al_flip_display())调用时重绘整个场景。

此外,在绘制图元时,请确保您了解坐标的工作原理。绘制填充矩形时,您将指定外部点 (x1,y1)-(x1+w,y1+h)

关于c++ - 在 Allegro 5 的运行时更改基元的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937233/

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