[PSP] Ayuda con detección de botones.

Antes de nada, hola a todos y gracias por leer mi duda.
Pues tengo un problema (bueno que sean dos) en un juego en SDL que estoy empezando. Primero decir que en PC hasta el momento funciona, los problemas vienen al pasar a PSP.
El juego entra perfectamente carga la imagen del personaje y todo pero:
1. No me detecta la pulsación de los botones
2. No me deja entrar a Home para salir del juego sin reiniciar.

Seguramente ambos problemas estén relacionados pero tras muchos intentos y distintas combinaciones sigo sin conseguirlo.
EL código es este:
main.c escribió:#include
#include
#include
#include
#include

#include
PSP_MODULE_INFO("saltitos", 0, 1, 1);

#define PSP_BUTTON_UP (8)
#define PSP_BUTTON_DOWN (6)
#define PSP_BUTTON_LEFT (7)
#define PSP_BUTTON_RIGHT (9)
#define PSP_BUTTON_X (2)
#define PSP_BUTTON_SQUARE (3)
#define PSP_BUTTON_TRIANGLE (0)
#define PSP_BUTTON_CIRCLE (1)
#define PSP_BUTTON_L (4)
#define PSP_BUTTON_R (5)
#define PSP_BUTTON_START (11)
#define PSP_BUTTON_SELECT (10)

void limpiar (SDL_Surface *screen);
void imprimir(SDL_Surface *screen, SDL_Surface *ima, int x, int y);


typedef struct stObjeto
{
int x, y;
int nframe;
int maqEstados;
int estado;
int energia;
int vidas;
int direccion;
int moverse;
SDL_Surface * imagen;
SDL_Surface * tmp;
int xColision, yColision, altoColision,anchoColision;
int tipoArma;
int ancho, alto;
int maxframe;
int limite_der, limite_izq;
int limite_sup, limite_inf;
int tipoMovimiento;
int dirvx;
int dirax;
int dirvy;
int diray;
}stObjeto;

stObjeto jugador;

void IniciaEstructuras(){
jugador.nframe = 0;
jugador.x = 40;
jugador.y = 195;
jugador.maxframe = 2;
jugador.limite_izq = 5;
jugador.limite_der = 200;
jugador.limite_sup = 190;
jugador.limite_inf = 242;
jugador.tipoMovimiento = 1;
jugador.moverse = 0;
jugador.ancho = 24; //31
jugador.alto = 31; //31
jugador.vidas = 3;
jugador.energia = 5; //10
jugador.tipoArma = 1; //1 pistola, 2 metralleta, 3 bazoka, etc
jugador.estado = 1;
jugador.maqEstados = 0;
jugador.xColision = 10;
jugador.yColision = 10;
jugador.altoColision = 10;
jugador.anchoColision = 25;
jugador.dirvx = 0;
jugador.dirax = 0;
jugador.dirvy = 0;
jugador.diray = 1; // Gravedad constante

}
void mover_Personaje(int *x, int *y, stObjeto *Personaje);
int main(int argc, char *argv[])
{
pspDebugScreenInit();

SDL_Surface *screen;
SDL_Surface *ima;

SDL_Event event;
int salir = 0;
IniciaEstructuras();

if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1)
{
printf("Error: %s\n", SDL_GetError());
return 1;
}

screen = SDL_SetVideoMode(480, 272, 16, SDL_HWSURFACE);

if (screen == NULL)
{
printf("Error: %s\n", SDL_GetError());
return 1;
}


SDL_WM_SetCaption("Minijuego", NULL);

ima = IMG_Load("ima.png");

if (ima == NULL)
{
printf("Error en IMG_Load= %s\n", SDL_GetError());
return 1;
}





while (! salir)
{
SDL_PollEvent(&event);

if (event.type == SDL_QUIT)
salir = 1;

mover_Personaje(&jugador.x, &jugador.y, &jugador);

limpiar(screen);
imprimir(screen, ima, jugador.x, jugador.y);
SDL_Flip(screen);
SDL_Delay(10);
}



SDL_Quit();
return 0;
}

void limpiar (SDL_Surface *screen)
{
Uint32 a = SDL_MapRGB(screen->format, 255,255,255);
SDL_FillRect(screen, NULL, a);
}


void imprimir(SDL_Surface *screen, SDL_Surface *ima, int x, int y)
{
SDL_Rect rect = {x, y, 0, 0};

SDL_BlitSurface(ima, NULL, screen, &rect);
}


void mover_Personaje(int *x, int *y, stObjeto *Personaje)
{
Uint8 *key;
key=SDL_GetKeyState(NULL);

if (key[PSP_BUTTON_LEFT] && jugador.x > 0)
(jugador.dirax) -= 5;

if (key[PSP_BUTTON_RIGHT] && (jugador.x + jugador.ancho) < 480)
(jugador.dirax) += 5;

if (key[PSP_BUTTON_UP] && jugador.estado == 1 && jugador.y > 0)
(jugador.dirvy) = -20;
jugador.estado = 2;

if (key[PSP_BUTTON_DOWN] && (jugador.y + jugador.alto) < 270)
(jugador.y) += 5;

jugador.dirvx = jugador.dirvx + jugador.dirax;
jugador.dirax = 0;
jugador.x = jugador.x + jugador.dirvx;
jugador.dirvx = 0;

jugador.dirvy = jugador.dirvy + jugador.diray;
jugador.y = jugador.y + jugador.dirvy;
if (jugador.dirvy >= 5)
{
jugador.dirvy = 4;
}
if (jugador.y + jugador.alto >= 270)
{
jugador.y = 270 - jugador.alto;
jugador.estado = 1;
}
}



El juego no es una maravilla, es solo una imagen que puede ir izquierda, derecha y saltar y aún está sin optimizar demasiado, sólo me siento orgulloso de la gravedad ya que es lo único que he desarrollado sin usar un tutorial [360º] .
Y también agradecer a Eskema por los geniales tutoriales que escribió (en el código he usado la estructura que enseñabas tio [jaja] )

Bueno a ver si alguien me consigue señalar el fallo y cómo corregirlo. Muchas gracias .

PD: Adjunto un rar con el código, el Makefile y otros dos intentos de main.c

Adjuntos

En cuanto quites el keystate y añadas el joystick ya veras como funciona perfectamente, eso si con 16bpp y hwsurface no esperes hacer ningun juego con unos fps decentes
1 respuesta