C 在Allegro 5中启用抗锯齿功能会导致对象旋转并改变位置(可能是由于内存错误)?
我在早期阶段有一个Allegro项目,我有一个代表宇宙飞船的结构(正如你可能想象的,这是我宇宙飞船游戏的基本部分)。该结构定义为:C 在Allegro 5中启用抗锯齿功能会导致对象旋转并改变位置(可能是由于内存错误)?,c,graphics,allegro,allegro5,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
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);
看起来是这样的:
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
正如你所看到的,一艘船失踪了,它们之间的距离不正确,有几艘船有旋转速度,还有一艘船的旋转已经设置为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
而是充满了这样的线条:
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,在这个特定的演示中,唯一的值Deg(旋转)应该是
请帮忙?我完全被难住了。关于这两行:
struct sc\u ship\u s*ll\u prev;结构sc_ship_s*ll_next
是否有某些原因将两个字段上的前缀ll\uu
与代码混淆?如果没有实际代码,我们只能猜测。鉴于信息匮乏,最有可能的原因是这些字段没有被删除initialized@user3629249没有特别的原因,没有;对我来说,一眼就能看出链表操作正在进行,这只是一种记忆法。创建每艘新船时,相关属性初始化为0。我会把代码贴出来,但是它;超过300行。如果无法创建最小值,。干净地编译仍然显示问题的代码,然后建议发布到其中一个代码站点。我怀疑我们对实际代码没有任何帮助,因此我们可以编译/链接/运行它以调试它。。如果正在使用任何特殊库,请务必发布指向这些库的链接,包括以下两行:struct sc\u ship\u s*ll\u prev;结构sc_ship_s*ll_next
是否有某些原因将两个字段上的前缀ll\uu
与代码混淆?如果没有实际代码,我们只能猜测。鉴于信息匮乏,最有可能的原因是这些字段没有被删除initialized@user3629249没有特别的原因,没有;对我来说,一眼就能看出链表操作正在进行,这只是一种记忆法。创建每艘新船时,相关属性初始化为0。我会把代码贴出来,但是它;超过300行。如果无法创建最小值,。干净地编译仍然显示问题的代码,然后建议发布到其中一个代码站点。我怀疑我们对实际代码没有任何帮助,因此我们可以编译/链接/运行它以调试它。。如果正在使用任何特殊库,请确保发布指向这些库的链接