在Allegro 5中打开抗锯齿会导致对象旋转并改变位置(可能是由于内存错误)?

时间:2016-02-11 06:30:05

标签: c graphics allegro allegro5

我有一个早期阶段的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;

如果没有抗锯齿功能,我会运行一个简单的演示,以便我可以测试缩放,发货更新等等。它完美地工作,生成交替的彩色船只:

The intended behavior of the demo

然而,当我添加这两行(不只是一个;它必须是两个)来启用抗锯齿时:

al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 2, ALLEGRO_SUGGEST);
al_set_new_display_option(ALLEGRO_SAMPLES, 4, ALLEGRO_SUGGEST);

它看起来像这样:

The incorrect behavior, which occurs when I enable multibuffer antialiasing

正如您所看到的,一艘船失踪,它们不是正确的距离,一些具有旋转速度,一个产生旋转已经设定为大约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

最后我检查过,-nan2530009767.279658都不等于0,这个特定演示中唯一的值(旋转)应该是。

请帮帮忙?我完全难过了。

0 个答案:

没有答案