2017-04-21 47 views
-2

我正在为一个简单的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}; 

精灵将在稍后从这个数组被调用。我收到了很多错误,这是否是错误的方式呢?

+3

你会得到什么错误? – aschepler

+1

您应该更准确地了解您面临的错误,以便我们能够为您提供更多帮助。 – Dracke

+1

'tank_sprites [4] [3]'或'tank_sprites [3] [4]'? – Aryan

回答

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 
}; 

内部存储sprite的数据如何你喜欢。然后创建精灵的集合:

std::vector<Sprite> sprites; 
1

你试图存储指针在浮点数的数组; int[8][8]衰变为int(*)[8],指向八个阵列的指针ints。
这不可能工作。

您需要使用正确的类型。
我推荐一个类型别名,因为弄清楚如何声明“一个指向数组的指针数组”是没有意思的。

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}} 

我猜想,根据您的换行和命名,可能不是你所期望的。
使用括号可以让你的意图变得清晰,并给编译器一个机会来捕捉尽可能多的问题。