我正在为一个简单的2D游戏编写代码,而且我正在处理麻烦并显示精灵。精灵是简单的2D数组,如下所示:
static int nl[8][8] = {0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,1,1,1,1,0,0,
1,1,1,1,0,1,0,0,
1,1,1,1,0,1,0,0,
0,0,1,1,0,1,0,0,
0,0,1,0,0,1,0,0,
0,0,1,1,1,1,0,0 };
像素开启时为1,像素关闭为0(游戏为84x48 lcd屏幕)。 我有12个这样的精灵,需要将它们保存在另一个2d数组中,如下所示:
double tank_sprites[4][3] = {nl,el,sl,wl,
nf,ef,sf,wf,
nr,er,sr,wr};
稍后将从此数组中调用精灵。我收到很多错误,这是错误的方法吗?
答案 0 :(得分:1)
您尝试将指针存储在浮点数组中; int[8][8]
衰减为int(*)[8]
,指向八个int
的数组的指针
那可能无法奏效。
您需要使用正确的类型 我建议使用类型别名,因为要弄清楚如何声明"指向数组的指针数组数组"没什么好玩的。
using sprite = int(*)[8];
sprite tank_sprites[4][3] = {nl,el,sl,wl,
nf,ef,sf,wf,
nr,er,sr,wr};
请注意tank_sprites
是
{{nl,el,sl},
{wl,nf,ef},
{sf,wf,nr},
{er,sr,wr}}
我猜,根据您的换行符和命名,可能不是您所期望的。
使用括号使您的意图清晰,并使编译器有机会捕获尽可能多的问题。
答案 1 :(得分:0)
double tank_sprites[4][3] = {nl,el,sl,wl,
nf,ef,sf,wf,
nr,er,sr,wr};
说它是一系列双打,但你并没有把双打加入其中。您正在尝试输入array of static int[8][8]
您需要创建一个代表您的Sprite的类。
class Sprite
{
int * m_data;
// Some Interface
};
内部存储精灵数据的方式。然后创建一个Sprites集合:
std::vector<Sprite> sprites;