› Foros › Nintendo 3DS › Scene
extern const struct {
unsigned int width;
unsigned int height;
unsigned int bytes_per_pixel;
unsigned char pixel_data[];
} gimp_image;
#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