Mi nombre es Francisco, actualmente estoy comenzando a practicar en SDL, tengo un pequeño proyecto para practicar, "soki", no es nada especial jajaja, solo mi primer programatia en SDL
Quisiera saber como podría mejorar mi codigo? Especialmente, en como utilizar Clases para el manejo de Frames, Sprites, Personaje..no se exactamente como es el pseudo codigo, digamos, para realizar cada uno, como debería organizarse cada uno
Ajunto mi pequeño proyecto para que lo vean, y su codigo.
- Código: Seleccionar todo
#include <SDL/SDL.h>
#include <stdlib.h>
#include <iostream>
int main()
{
SDL_Init( SDL_INIT_EVERYTHING );
SDL_Surface *ventana, *soki, *suelo, *fondo;
SDL_Event tecla;
SDL_Rect posicion_soki = {0, 152};
SDL_Rect posicion_recorte = {0, 0, 40, 40};
//SDL_Rect posicion_suelo = {0, 240};
SDL_Rect posicion_fondo = {0, 0};
int done = 0;
ventana = SDL_SetVideoMode( 800, 400, 32, SDL_SWSURFACE | SDL_ASYNCBLIT | SDL_DOUBLEBUF);
if( ventana == NULL)
{ fprintf (stderr, "No se pudo mostrar el modo de video 800x600: %s\n", SDL_GetError());
exit(1);
}
//Titulo de la ventana
SDL_WM_SetCaption("Soki", NULL);
soki = SDL_LoadBMP("soki.bmp");
if( soki == NULL)
{ fprintf (stderr, "No se pudo mostrar el grafico: %s\n", SDL_GetError());
exit(1);
}
//suelo = SDL_LoadBMP("suelo.bmp");
fondo = SDL_LoadBMP("fondo.bmp");
//De la imagen soki, no pintar el color violeta (255,0,150)
SDL_SetColorKey(soki,SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(soki->format,255,0,150));
//Repeticion de tecla
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL);
while(true)
{
while ( SDL_PollEvent(&tecla))
{
if(tecla.type==SDL_QUIT){
exit(0);}
if(tecla.type==SDL_KEYDOWN)
switch(tecla.key.keysym.sym)
{
case SDLK_LEFT: posicion_soki.x-=5.5;
posicion_recorte.x-=40;
if(posicion_recorte.x<0)
{
posicion_recorte.x=360;
}
if(posicion_soki.x<0)
{
posicion_soki.x=0;
}
break; //Break, para detener loop en la instruccion
case SDLK_RIGHT: posicion_soki.x+=5.5;
posicion_recorte.x+=40;
if(posicion_recorte.x>360)
{
posicion_recorte.x=0;
}
if(posicion_soki.x>760) //No se puede usar 800 como limite, porque la distancia entre soki y el borde del cuadrado es de 40 pixeles
{
posicion_soki.x=760;
}
break;
case SDLK_UP: posicion_soki.y-=10;
posicion_recorte.x-=40;
if(posicion_recorte.x<0)
{
posicion_recorte.x=360;
}
if(posicion_soki.y<0)
{
posicion_soki.y=0;
}
break;//Break, para detener loop en la instruccion
case SDLK_ESCAPE: return 0;
case SDLK_DOWN: posicion_soki.y+=10;
if(posicion_soki.y>148)
{
posicion_soki.y = 148; //Limita el movimiento de soki hasta 400 en y
}
posicion_recorte.x+=40;
if(posicion_recorte.x>360)
{
posicion_recorte.x=0;
}
break;
}
}
//Pintar sobre pantalla, el siguiente color
SDL_FillRect(ventana, 0, SDL_MapRGB(ventana->format, 80, 80, 80));
//Dibujar nave en pantalla, en la posicion &posicion_nave
//SDL_BlitSurface(suelo, NULL, ventana, &posicion_suelo);
SDL_BlitSurface(fondo, NULL, ventana, &posicion_fondo);
SDL_BlitSurface(soki, &posicion_recorte, ventana, &posicion_soki);
//Mostrar ventana
SDL_Flip( ventana );
}
//Liberar superficie
SDL_FreeSurface ( ventana );
return 0;
}
Básicamente quiero aprendear el manejo de Sprites y Frames corréctamente, eh leído sobre esto en varios libros y tutoriales, pero cada uno, lamentablemente estan adjudican sus descripciones únicamente a sus ejemplos, por lo tanto me cuesta lograr entenderlos de manera efectiva.
LINK de descarga de mi proyecto (450kb) : https://mega.co.nz/#!9whwxaTT!Sz5YE3gIu ... moRphH7t5k
Saludos a todos!