如何在2D数组中存储多个精灵?

时间:2017-04-21 20:01:54

标签: c++ arrays 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个这样的精灵,需要将它们保存在另一个2d数组中,如下所示:

double tank_sprites[4][3] =  {nl,el,sl,wl,  
                              nf,ef,sf,wf,  
                              nr,er,sr,wr};  

稍后将从此数组中调用精灵。我收到很多错误,这是错误的方法吗?

2 个答案:

答案 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;