2014-04-08 188 views
1

我在写游戏,并决定使用Allegro 5和C/C++。到目前为止,我已经编写了代码中的大部分错误,但是我已经涉及到图形和包含的数学计算,并且我被卡住了。Allegro 5,C++和Math

这里的短版本:

al_draw_rotated_bitmap(...)没有做太多。有时图像在屏幕上,有些时候则不是。我已验证所有内容都是通过al_draw_bitmap(...)进行绘制加载的,并且一切都很好,另外,在绘图上没有段错误,所以其他所有工作都是如此。

仅供参考,该文件说,这是对的al_draw_rotated_bitmap(...)参数:

al_draw_rotated_bitmap(ALLEGRO_BITMAP *bitmap, float cx, float cy, float dx, float dy, float angle, int flags)

哪里cx是X-中心,cy是Y中心,dx是X-目的地,dy是Y目标,angle是以弧度旋转的角度,flags是告诉Allegro是否应该在位图上执行+/- 90度旋转的事情的组合。

我试过很多东西,没有一个能产生想要的结果。我已经尝试使d(x,y)相同,不同,将dy设置为旋转中心,将cx & cy设置为位图中的各个点,后缓冲器,旋转中心等等。我可能只是在这里真的很愚蠢,错过了一些东西,但我一直没有弄明白。如果有人知道这个功能如何工作,并愿意帮助我完成工作,我会很乐意听取您的建议。谢谢。

2014年4月8日:我被要求张贴代码相关的功能,这里有云:

实际绘图:

void renderPlayer(Player player)  { 
cout << player.x << " " << player.y << endl; 
float angle = 0; 
al_draw_rotated_bitmap(player.tex, 200, 200, 0, 0, angle, NULL); 
} 

这个结构是一个球员的定义是:

struct Player { 
float x; 
float y; 
float r; 
float t; 
int radius; 
int sizex; 
int sizey; 
int health; 
int speed; 
ALLEGRO_BITMAP *tex; 
Weapon weapon; 
}; 
+0

你能告诉我们你的实际代码吗? – Tommy

+0

完成。它在原始文章中。 – PyroAVR

回答

2

好吧,我不知道为什么之前没有工作... 它应该工作的方式如下:

al_draw_rotated_bitmap(ALLEGRO_BITMAP *yourbmp, int bitmap_coord_x, int bitmap_coord_y, int screen_coord_x, int screen_coord_y, float angle_in_radians, int flags)

对我来说工作正常!它仍然令我困惑,为什么这一开始不起作用......我怀疑这是我的代码中的其他内容。