我正在编写一个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);
}
不幸的是,这不起作用。当我使用类似的代码时,对象就不会被绘制出来。没有编译错误,没有运行时错误,没有任何错误。相反,这些对象没有颜色,因此是不可见的,尽管我已经确认它们实际上已经创建了。 Sooo我想这意味着颜色变量在某种程度上是正确的类型,但是当它被设置为等于函数返回的任何值时,它不会保留al_map_rgb()
的值。我知道它必须返回一些内容,因为否则它不能成为al_draw
函数中的参数。
虽然我可以写出if else if语句导致不同的绘制函数,但我宁愿只有一些简单的代码包,而不是一堆冗余的东西,它们解决了一些简单的问题。我只是不想使用相当于胶带的代码。
所以我确定问题可能与我假设al_map_rgb()
返回ALLEGRO_COLOR
的值有关,但我不知道。你们愿意提出一些建议吗?
答案 0 :(得分:0)
首先,没有必要做出任何假设。正如您在the manual中看到的那样,al_map_rgb()
确实会返回ALLEGRO_COLOR
个对象。
这段代码没有错。 x,y
值不正确,目标位图不符合您的预期,或者您没有调用al_flip_display()
。务必在每个帧(即每个al_flip_display()
)调用上重绘整个场景。
此外,在绘制图元时,请确保了解坐标的工作原理。绘制填充矩形时,您将指定外部点(x1,y1)-(x1+w,y1+h)
。