如何在2D数组中存储多个精灵?
问题描述:
我正在为一个简单的2D游戏编写代码,而且我正在苦恼于acccessing和显示sprite。精灵是简单的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,需要将它们保存在另一个二维数组是这样的:
double tank_sprites[4][3] = {nl,el,sl,wl,
nf,ef,sf,wf,
nr,er,sr,wr};
精灵将在稍后从这个数组被调用。我收到了很多错误,这是否是错误的方式呢?
答
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
};
内部存储sprite的数据如何你喜欢。然后创建精灵的集合:
std::vector<Sprite> sprites;
答
你试图存储指针在浮点数的数组; int[8][8]
衰变为int(*)[8]
,指向八个阵列的指针int
s。
这不可能工作。
您需要使用正确的类型。
我推荐一个类型别名,因为弄清楚如何声明“一个指向数组的指针数组”是没有意思的。
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}}
我猜想,根据您的换行和命名,可能不是你所期望的。
使用括号可以让你的意图变得清晰,并给编译器一个机会来捕捉尽可能多的问题。
你会得到什么错误? – aschepler
您应该更准确地了解您面临的错误,以便我们能够为您提供更多帮助。 – Dracke
'tank_sprites [4] [3]'或'tank_sprites [3] [4]'? – Aryan