2017-04-21 4 views
-2

Je suis en train d'écrire du code pour un simple jeu en 2D et j'ai des problèmes d'acccessing et d'affichage des sprites. Les sprites sont simples tableaux 2D comme ceci:Comment puis-je stocker un certain nombre de sprites dans un tableau 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 }; 

Avec 1 est pour pixel, 0 est pour pixel off (Le jeu est un écran LCD de 84x48). J'ai 12 de ces sprites et la nécessité de les enregistrer dans un autre tableau 2d comme ceci:

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

Les sprites seront appelés plus tard à partir de ce tableau. Je reçois beaucoup d'erreurs et de tels, est-ce la mauvaise façon de faire à ce sujet?

+3

Quelles sont les erreurs? – aschepler

+1

Vous devriez être plus précis sur les erreurs que vous rencontrez pour que nous puissions vous aider davantage. – Dracke

+1

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

Répondre

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

Dit qu'il s'agit d'un tableau de doubles, mais vous n'y mettez pas de doubles. Vous essayez de mettre des éléments de type array of static int[8][8]

Vous devez créer une classe qui représente votre Sprite.

class Sprite 
{ 
    int * m_data; 

    // Some Interface 
}; 

Stockez en interne les données de l'image-objet comme vous le souhaitez. Créez ensuite une collection de sprites:

std::vector<Sprite> sprites; 
1

Vous essayez de stocker des pointeurs dans un tableau de nombres à virgule flottante; int[8][8] se désintègre en int(*)[8], un pointeur vers un tableau de huit int s.
Cela ne peut pas fonctionner.

Vous devez utiliser les types corrects.
Je recommande un alias de type parce que comprendre comment déclarer "un tableau de tableaux de pointeurs sur des tableaux" n'est pas amusant.

using sprite = int(*)[8]; 
sprite tank_sprites[4][3] = {nl,el,sl,wl, 
           nf,ef,sf,wf, 
           nr,er,sr,wr}; 

Notez que tank_sprites est

{{nl,el,sl}, 
{wl,nf,ef}, 
{sf,wf,nr}, 
{er,sr,wr}} 

que je suppose, en fonction de vos sauts de ligne et la dénomination, est peut-être pas ce que vous attendez.
Utilisez des parenthèses pour clarifier votre intention et donnez au compilateur une chance d'attraper autant de problèmes que possible.