我希望能够将对象注册/注销到列表中,并检查鼠标是否将鼠标悬停在它们上方以显示工具提示。但是我一开始就绊脚石。
我将使用:al_get_pixel
和al_unmap_rgba
来检索每个像素的alpha值,并确定当鼠标悬停在像素上时,它是否足够可见以算作命中点。
我遇到的主要问题是研究如何最好地存储单个“ hitmap”以及对生成它的对象的引用。由于可能需要生成大小不同的许多不同类型的对象(如struct的对象)。我希望我能做些类似于检查复杂对象是否“扩展”基础对象的事情,但是我不知道如何用c ++实现。
Ps;我知道我可以为每个对象创建一个屏幕大小的数组,但是我这样做主要是为了最大程度地提高效率。我会创建动态大小的数组,但是...
答案 0 :(得分:0)
al_get_pixel
可以工作,但是即使您锁定了所有位图,它也会非常慢,除非您使用类似选择缓冲区的东西。基本思想是用不同的颜色ID渲染每个对象上的每个交互区域。这意味着您需要绘制两次场景,正常情况下绘制一次,并用颜色进行绘制一次。然后,当需要读取鼠标位置时,可以使用拾取缓冲区读取单个像素并获取其颜色ID。
您可能还想尝试不同的碰撞检测方法,例如边界框,边界圆或其他易于碰撞检测的形状。
还有第三个选项,即像素完美碰撞。它涉及在所有对象中制作1bpp的蒙版,然后检查这些对象之间是否存在碰撞。