2

我正在写一个基本的游戏。

我想要一个带有实际正确轮廓的光标图像,用于碰撞检测。这不适用于鼠标——我希望小光标在我的游戏中飞来飞去,我不希望它们的边界框是矩形。

但我是 Allegro 和图形编程的新手。我的第一个想法是使用 al_draw_polygon 来创建一个标准光标外观,但后来我意识到我完全不知道如何确定要喂它的顶点。有没有更好的方法来做到这一点?另外,在绘制多边形时计算顶点相对于彼此的坐标的标准方法是什么?你肯定不会在纸上画一个图表,然后每次都计算出来吗?

我想到的另一种方法是加载鼠标的图像,但它会是矩形的。我该如何正确地做到这一点?

注意:C++。这是一个给定的数字,但以防万一。

4

2 回答 2

1

您正在询问如何绘制光标以及如何进行碰撞检测。虽然相关,但这是两个独立的主题。

如果您刚刚开始,那么我建议为光标加载 32 位 RGBA PNG 文件。Alpha 通道将允许您绘制非矩形图像。您还可以旋转和/或缩放图像。

然后你必须担心碰撞检测。这真的与 Allegro 无关。您可以使用任何 2D 物理库,或者只是查找有关如何检查线是否与三角形碰撞的公式等。最简单的方法是从在对象的重要区域周围近似一个框开始。您以后总是可以构建更高级的碰撞检测。

于 2012-05-11T00:04:07.920 回答
1

很难理解你的意思,但你可以;想要将鼠标添加到您的程序中,将其添加到循环中(通常在计时器上,这样即使没有输入也会刷新)并使用从光标获得的坐标然后绘制光标。

有 2 种碰撞检测方法 - 像素完美方法,检查透明度和命中框方法,您可以检查 x / y 是否试图移动到框之外,如果是,则将其移回,或扣除健康,无论你打算做什么。

Allegro 5 wiki 中介绍了这两种方法。我希望我能有所帮助。要创建一组在不同方向上飞行的游标,请使用 srand(); 之类的方法创建一个随机方向 int;然后添加一个速度,结果将是一个向量,接下来每个游标必须调用一个碰撞函数,以防止其退出例如,游戏窗口的侧面我会创建一个 windowheight 和 windowwidth 整数,然后检查对象的 x 或 y 是否超出范围。如果是,则“弹回”光标,或改变它的方向. 然后你需要做同样的事情,除了“玩家”,比较看看当前的 x/y 是否与另一个 x/y 不重叠,如果是,那么做一些事情。

于 2015-02-16T08:23:32.607 回答