Problemas para crear un Homebrew.

Buenas, esta es la primera vez que escribo en este foro, y es porque quería resolver un problema que tengo al intentar programar usando SF2DLIB.

Os voy a intentar explicar qué me pasa.
Tengo creadas ciertas imágenes PNG en formato .C mediante GIMP. Y, mirando ejemplos que vienen con la librería, para importarlas sólo tengo que poner:
extern const struct {
   unsigned int     width;
   unsigned int     height;
   unsigned int     bytes_per_pixel;
   unsigned char    pixel_data[];
} gimp_image;


Hasta ahí todo me va bien. Pero lo que intento hacer es un programa main.cpp que llame a una clase jugador.cpp que cargue/imprima/libere las texturas mediante funciones. Toda la parte de código está "terminada", pero no sé cómo expresar el código anterior dentro de una clase, ni en su header. (Estoy aprendiendo a programar aún. [agggtt] ) (Copio mi jugador.cpp y jugador.h por si alguien puede ayudarme)

#include <stdio.h>
#include <3ds.h>
#include <sf2d.h>
#include <stdlib.h>
#include "personaje.h"


      extern const struct imagen {
        unsigned int     width;
        unsigned int     height;
        unsigned int     bytes_per_pixel;
        unsigned char    pixel_data[];
      } personaje1_img;

      extern const struct imagen {
        unsigned int     width;
        unsigned int     height;
        unsigned int     bytes_per_pixel;
        unsigned char    pixel_data[];
      } personaje2_img;

      extern const struct imagen {
        unsigned int     width;
        unsigned int     height;
        unsigned int     bytes_per_pixel;
        unsigned char    pixel_data[];
      } personaje3_img;

      extern const struct imagen {
        unsigned int     width;
        unsigned int     height;
        unsigned int     bytes_per_pixel;
        unsigned char    pixel_data[];
      } personaje4_img;


   personaje::personaje(){
      texturas[0] = sf2d_create_texture_mem_RGBA8(personaje1_img.pixel_data, personaje1_img.width, personaje1_img.height, TEXFMT_RGBA8, SF2D_PLACE_RAM);
      texturas[1] = sf2d_create_texture_mem_RGBA8(personaje2_img.pixel_data, personaje2_img.width, personaje2_img.height, TEXFMT_RGBA8, SF2D_PLACE_RAM);
      texturas[2] = sf2d_create_texture_mem_RGBA8(personaje3_img.pixel_data, personaje3_img.width, personaje3_img.height, TEXFMT_RGBA8, SF2D_PLACE_RAM);
      texturas[3] = sf2d_create_texture_mem_RGBA8(personaje4_img.pixel_data, personaje4_img.width, personaje4_img.height, TEXFMT_RGBA8, SF2D_PLACE_RAM);
      frame = 0;
      posx = 200;
      posy = 240-40-32;
      mirandoDerecha = 1;
   }
   
   void personaje::mostrarLEFT(){
      actualizar();
      
      if(mirandoDerecha){
         sf2d_draw_texture(texturas[frame], posx, posy);
      }else{
         sf2d_draw_texture_scale(texturas[frame],posx, posy,-1,1);
      }
   }
   void personaje::mostrarRIGHT(float offset){
      actualizar();
      float offset3d = offset;
      
      if(mirandoDerecha){
         sf2d_draw_texture(texturas[frame], posx + offset3d/2, posy);
      }else{
         sf2d_draw_texture_scale(texturas[frame],posx + offset3d/2, posy,-1,1);
      }
   }
   
   void personaje::actualizar(){
      hidScanInput();
      down = hidKeysDown();
      held = hidKeysHeld();
      
      if (down & KEY_LEFT){
         mirandoDerecha = 0;
      }else if(down & KEY_RIGHT){
         mirandoDerecha = 1;
      }else if (held & KEY_LEFT){
         mirandoDerecha = 0;
         if (posx > 0){
            posx = posx - 3;
            if (frame == 3){
               frame = 1;
            }else{
               frame++;
            }
         }
         
      }else if (held & KEY_RIGHT){
         mirandoDerecha = 1;
         if (posx < 400-32){
            posx = posx+3;
            if (frame == 3){
               frame = 1;
            }else{
               frame++;
            }
         }
         
      }else {
         frame = 0;
      }
      
   }
   
   void personaje::liberarTexturas(){
      for (int i = 0; i<4; i++){
         sf2d_free_texture(texturas[i]);
      }
      
   }


#ifndef PERSONAJE
#define PERSONAJE

      
class personaje{
   const struct imagen {
        unsigned int     width;
        unsigned int     height;
        unsigned int     bytes_per_pixel;
        unsigned char    pixel_data[];
        imagen();
      } personaje1_img;
   
      
      imagen personaje1_img;
      imagen personaje2_img;
      imagen personaje3_img;
      imagen personaje4_img;

      sf2d_texture * texturas[4];
      int frame;
      int posx;
      int posy;
      int mirandoDerecha;
      u32 held;
      u32 down;
      
      public:
         personaje();
         void mostrarLEFT();
         void mostrarRIGHT(float offset);
         void actualizar();
         void liberarTexturas();
};



#endif


Gracias de antemano.
0 respuestas