在Allegro 5中运行期间更改基元的颜色

时间:2012-06-07 17:59:16

标签: c++ windows visual-studio-2010 allegro

我正在编写一个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的值有关,但我不知道。你们愿意提出一些建议吗?

1 个答案:

答案 0 :(得分:0)

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

这段代码没有错。 x,y值不正确,目标位图不符合您的预期,或者您没有调用al_flip_display()。务必在每个帧(即每个al_flip_display())调用上重绘整个场景。

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