1. La prueba consiste en una imagen que se mueve con las teclas, pero por la izquierda y por arriba no se sale de la pantalla. Se supone que el rectángulo tiene las variables x e y con signo así que no comprendo por que me da este problema. ¿Puede ser que lo modifica el blit? por que se desplaza lo de ese ciclo pero no mas.
2. Tenía problemas con los eventos pero ahora ya no me salen y creo que no he tocado nada de la parte esa

Como no es muy largo el código lo pego a continuación:
MakeFile
- Código: Seleccionar todo
CXX = g++
OBJS = main.o personaje.o
CXXFLAGS = -g -Wall
BIN = personaje
all: $(BIN)
$(BIN): $(OBJS)
g++ -o personaje $(OBJS) -lSDL -ggdb3
main.cpp
- Código: Seleccionar todo
#include <stdio.h>
#include "personaje.h"
int main (void)
{
bool salir = false;
class personaje personaje;
SDL_Event event;
SDL_Surface *screen;
if (SDL_Init(SDL_INIT_VIDEO) == -1)
{
printf("Error al ejecutar SDL_Init: %s\n", SDL_GetError());
return 1;
}
screen = SDL_SetVideoMode(320, 240, 16, SDL_DOUBLEBUF | SDL_HWSURFACE);
if ( screen == NULL )
{
printf("Error al ejecutar SDL_SetVideoMode: %s\n", \
SDL_GetError());
return 1;
}
SDL_WM_SetCaption("Prueba sprite", NULL);
while (salir == false)
{
/* while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
salir = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_q:
case SDLK_ESCAPE:
salir = true;
break;
default:
break;
}
default:
break;
}
} */
while (SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT)
salir = true;
}
SDL_FillRect(screen, NULL, 0);
personaje.actualizar();
personaje.imprimir(screen);
SDL_Flip(screen);
}
SDL_Quit();
return 0;
}
personaje.cpp
- Código: Seleccionar todo
#include "personaje.h"
personaje :: personaje ()
{
image = SDL_LoadBMP("ima/personaje.bmp");
if (image == NULL)
{
printf("Error al cargar la imágen: %s\n", SDL_GetError());
}
rect.x = 50;
rect.y = 60;
rect.w = image->w;
rect.h = image->h;
}
personaje :: ~personaje ()
{
if (image == NULL)
SDL_FreeSurface(image);
}
void personaje :: actualizar (void)
{
key = SDL_GetKeyState(NULL);
if (key[SDLK_UP])
rect.y = rect.y - 10;
if (key[SDLK_DOWN])
rect.y = rect.y + 10;
if (key[SDLK_LEFT])
rect.x = rect.x - 10;
if (key[SDLK_RIGHT])
rect.x = rect.x + 10;
}
void personaje :: imprimir (SDL_Surface *screen)
{
SDL_BlitSurface(image, NULL, screen, &rect);
}
personaje.h
- Código: Seleccionar todo
#ifndef _JUGADOR
#define _JUGADOR
#include "SDL/SDL.h"
class personaje
{
public:
personaje();
~personaje();
void actualizar (void);
void imprimir (SDL_Surface *screen);
private:
SDL_Surface *image;
SDL_Rect rect;
Uint8 *key;
};
#endif
¿Alguna idea de por que pasa esto? Si es un fallo bastante tonto acordaros que es mi primera prueba con SDL.
Saludos y gracias de antemano.