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

Posted

技术标签:

【中文标题】在 Allegro 5 运行时更改基元的颜色【英文标题】:Changing Colors of Primitives During Runtime in Allegro 5 【发布时间】:2012-06-07 17:59:15 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于在 Allegro 5 运行时更改基元的颜色的主要内容,如果未能解决你的问题,请参考以下文章

C++ Allegro 5 - 找不到访问冲突的来源

DevC++ 中的 Allegro 错误

更改字体颜色运行时 Android

Android:在运行时更改形状颜色

Unity 在运行时更改 UI 图像颜色

在运行时更改形状边框颜色