我有一个早期阶段的Allegro项目,我有一个结构来代表宇宙飞船(我可能想象的太空飞船游戏的一个基本部分)。该结构定义为:
typedef struct sc_ship_s {
// Linked List attributes
struct sc_ship_s *ll_prev;
struct sc_ship_s *ll_next;
// Informational attributes
char name[256];
char ship_class[256];
// Physical attributes
// Position and velocity
float posx, posy;
float velx, vely;
// Rotation, in degrees, and rotational velocity, in deg. per second
float rotation;
float rotvel;
// Rendering attributes
sc_shiprender_t *render_attributes;
} sc_ship_t;
如果没有抗锯齿功能,我会运行一个简单的演示,以便我可以测试缩放,发货更新等等。它完美地工作,生成交替的彩色船只:
然而,当我添加这两行(不只是一个;它必须是两个)来启用抗锯齿时:
al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 2, ALLEGRO_SUGGEST);
al_set_new_display_option(ALLEGRO_SAMPLES, 4, ALLEGRO_SUGGEST);
它看起来像这样:
正如您所看到的,一艘船失踪,它们不是正确的距离,一些具有旋转速度,一个产生旋转已经设定为大约230度。我生成它们的代码还没有设置旋转或旋转速度。
我怀疑某种内存损坏,因为我的调试输出应该是这样的行:
DEBUG src/ship.c:86: Drawing a ship: CX: 16 CY: 16 Dx: 266.400085 Dy: 286.000000 Deg: 0.000000 Sca: 1.000000
而是充满了这样的行:
DEBUG src/ship.c:86: Drawing a ship: CX: 16 CY: 16 Dx: 243.599915 Dy: 260.400085 Deg: -nan Sca: 1.000000
DEBUG src/ship.c:86: Drawing a ship: CX: 16 CY: 16 Dx: 129.199921 Dy: 131.800079 Deg: 2530009767.279658 Sca: 1.000000
最后我检查过,-nan
和2530009767.279658
都不等于0,这个特定演示中唯一的值(旋转)应该是。
请帮帮忙?我完全难过了。