Hola el caso es que tengo un problema para actualizar la pantalla el personaje me deja un rastro :
http://www.megaupload.com/?d=LPP1F8LTel código es este:
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include "SDL/SDL_thread.h"
//hilo
//hacer una variable flag(true,false) y dsp decir que si se apreto en el menu alguna que sea true y que corra todo.
SDL_Rect pos2;
SDL_Surface * fondo5;
SDL_Surface * screen;
SDL_Surface * pantalla;
SDL_Rect pos3;
int start = 1;
int salir=0;
int ia_enemigo(void *unused){
while (! salir) {
if (start==1){
int b;
for(b=0;b<1000;b++){
if (b>0 && b<200)pos2.x++;
if (b>200 && b<400)pos2.x++,pos2.y--;
if (b>400 && b<600)pos2.x--;
if(b>600 && b<800)pos2.y++,pos2.x--;
if (b>800 && b<1000)pos2.y--;
SDL_BlitSurface (fondo5 , NULL, screen, &pos2);
SDL_Flip (screen);
}
}
}
}
int main(int argc, char *argv[])
{
//declaración de variables
SDL_Surface * fondo;
SDL_Surface * fondo1;
SDL_Surface * fondo2;
SDL_Surface * fondo3;
SDL_Surface * fondo4;
SDL_Surface * disparo;
SDL_Surface * frameact;
SDL_Surface * menu;
SDL_Thread * inteligencia;
SDL_Event event;
SDL_Rect pos;
SDL_Rect posd;
SDL_Rect posnave;
//inicialización de SDL
if(SDL_Init(SDL_INIT_VIDEO)<0)
{
printf("ERROR: %s \n", SDL_GetError());
return 1;
}
screen = SDL_SetVideoMode(580,470,24, SDL_SWSURFACE|SDL_DOUBLEBUF);
if (screen==NULL){
printf("Error: %s \n", SDL_GetError());
return 1;
}
inteligencia = SDL_CreateThread(ia_enemigo,(void *)NULL);
//parte logica
pos.x=0;
pos.y=0;
pos.w=56;
pos.h=81;
pos2.x=0;
pos2.y=300;
pos2.w=275;
pos2.h=325;
posd.w=45;
posd.h=20;
pos3.x=0;
pos3.y=0;
pos3.w=1024;
pos3.h=768;
fondo = SDL_DisplayFormat(SDL_LoadBMP ("pacman_central.bmp"));
fondo1 = SDL_DisplayFormat(SDL_LoadBMP ("pacman_arriba.bmp"));
fondo2 = SDL_DisplayFormat(SDL_LoadBMP ("pacman_abajo.bmp"));
fondo3 = SDL_DisplayFormat(SDL_LoadBMP ("pacman_derecha.bmp"));
fondo4 = SDL_DisplayFormat(SDL_LoadBMP ("pacman_izquierda.bmp"));
fondo5 = SDL_DisplayFormat(SDL_LoadBMP ("pacman.bmp"));
disparo = SDL_DisplayFormat(SDL_LoadBMP ("shoot.bmp"));
menu = SDL_DisplayFormat(SDL_LoadBMP ("titulo.bmp"));
pantalla = SDL_DisplayFormat(SDL_LoadBMP ("Empyrean.bmp"));
SDL_SetColorKey(fondo1,SDL_SRCCOLORKEY,SDL_MapRGB(fondo1->format,255,0,255));
SDL_SetColorKey(fondo2,SDL_SRCCOLORKEY,SDL_MapRGB(fondo2->format,255,0,255));
SDL_SetColorKey(fondo3,SDL_SRCCOLORKEY,SDL_MapRGB(fondo3->format,255,0,255));
SDL_SetColorKey(fondo4,SDL_SRCCOLORKEY,SDL_MapRGB(fondo4->format,255,0,255));
SDL_SetColorKey(fondo5,SDL_SRCCOLORKEY,SDL_MapRGB(fondo5->format,255,0,255));
SDL_BlitSurface (pantalla , NULL, screen, &pos3);///ponerlo en un hilo nuevo
SDL_Flip (screen);
SDL_BlitSurface (pantalla , NULL, screen, &pos3);///ponerlo en un hilo nuevo
SDL_Flip (screen);
//loop principal
while (! salir){
SDL_PollEvent(&event);
//si se pulso una tecla
if (event.type == SDL_KEYDOWN){
if (event.key.keysym.sym == SDLK_ESCAPE){
salir=1;
}
//disparo
if (event.key.keysym.sym == SDLK_SPACE){
posd.x=pos.x+25;
posd.y=pos.y-18;
if (frameact==fondo3){
while (posd.x<=640){
SDL_BlitSurface (disparo , NULL, screen, &posd);
SDL_Flip (screen);
posd.x=posd.x + 8;
if( posd.x > pos2.x && posd.x < ( pos2.x + pos2.w ) ) if( posd.y > pos2.y && posd.y < ( pos2.y + pos2.h ) ) salir=1;
}
}
if (frameact==fondo4){
while (posd.x>=0){
SDL_BlitSurface (disparo , NULL, screen, &posd);
SDL_Flip (screen);
posd.x=posd.x - 6;
if( posd.x > pos2.x && posd.x < ( pos2.x + pos2.w ) ) if( posd.y > pos2.y && posd.y < ( pos2.y + pos2.h ) ) salir=1;
}
}
}
//fin disparo
//direcciones de movimiento
if (event.key.keysym.sym == SDLK_RIGHT){
frameact=fondo3;
SDL_BlitSurface (fondo3 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos2.x > pos.x && pos2.x < ( pos.x + pos.w ) ) if( pos2.y > pos.y && pos2.y < ( pos.y + pos.h ) ) salir=1;
pos.x=pos.x + 2;
}
if (event.key.keysym.sym == SDLK_LEFT){
frameact=fondo4;
SDL_BlitSurface (fondo4 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos2.x > pos.x && pos2.x < ( pos.x + pos.w ) ) if( pos2.y > pos.y && pos2.y < ( pos.y + pos.h ) ) salir=1;
pos.x = pos.x - 2;
}
if (event.key.keysym.sym == SDLK_UP){
frameact=fondo1;
SDL_BlitSurface (fondo1 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos2.x > pos.x && pos2.x < ( pos.x + pos.w ) ) if( pos2.y > pos.y && pos2.y < ( pos.y + pos.h ) ) salir=1;
pos.y = pos.y - 2;
}
if (event.key.keysym.sym == SDLK_DOWN){
frameact=fondo2;
SDL_BlitSurface (fondo2 , NULL, screen, &pos);
SDL_Flip (screen);
if( pos.x > pos2.x && pos.x < ( pos2.x + pos2.w ) ) if( pos.y > pos2.y && pos.y < ( pos2.y + pos2.h ) ) salir=1;
pos.y = pos.y + 2;
}
}
}
SDL_Flip (screen);
}
//ESPERO QUE ME PUEDAN AYUDAR GRACIAS =)