Iniciar sesión

Ver la versión completa : mover una imagen por la pantalla con sdl y C(no c++))



Sprite_Man
14/08/2011, 17:10
Hola el caso es que recién empece con SDL pero no con C y estaba experimentando y quería hacer que la imagen que tengo se mueva pero no se si esta bien el código por eso quiero que me corrijan por favor gracias.




#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])

{

SDL_Surface * screen;
SDL_Surface * fondo;
SDL_Event event;
int salir=0;

if(SDL_Init(SDL_INIT_VIDEO)<0)
{
printf("ERROR: %s \n", SDL_GetError());
return 1;
}
screen = SDL_SetVideoMode(320,240,16, SDL_SWSURFACE);
if (screen==NULL){
printf("Error: %s \n", SDL_GetError());
return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
fondo = SDL_LoadBMP ("pantalla.bmp");
if (fondo==NULL){
printf("no se ha podido cargar el fondo %s \n", SDL_GetError());
return 1;
}

while (! salir){

SDL_Rect pos;
pos.x=0;
pos.y=0;
pos.w=20;
pos.h=20;


SDL_BlitSurface (fondo , NULL, screen, &pos);
SDL_Flip (screen);


SDL_PollEvent(&event);

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

if (event.type == SDL_KEYDOWN){

if (event.key.keysym.sym == SDLK_RIGHT)
pos.x=pos.x++;

}

}
}


//la imagen es esta: megaupload.com/?d=24AU8NAI

hardyx
14/08/2011, 17:53
El código tiene buena pinta, excepto algunas cosillas, pero según vayas avanzando es recomendable que veas algún tutorial de C. Por ejemplo, la SDL utiliza bastantes punteros.

La línea:
pos.x=pos.x++ debería ser pos.x++

El bloque que define SDL_Rect pos y lo inicializa debería estar fuera del bucle while (unas líneas antes). De otro modo, aunque incrementes la pos.x la vuelve a poner a 0 cada vez. Como resultado, la imagen no se mueve.

Otra cosa, si vas a programar para Wiz o Caanoo, los códigos de teclas son diferentes que en PC. En Caanoo es un poco diferente el joystick también. En cualquier juego o emulador con código fuente que use SDL puedes encontrar las constantes de estos códigos.

Por lo demás tiene buena pinta.
Espero que aprendas mucho y te diviertas.

Sprite_Man
15/08/2011, 13:17
ok ya lo solucione muchísimas gracias =)

Sprite_Man
16/08/2011, 13:37
Estuve leyendo de todo pero no se como animar el sprite tengo la secuencia en total tiene 5 frames pero no se como hacerlo como hacerlo en sdl lo quiero hacer en C no en c++ pero no se como hacerlo.

hardyx
16/08/2011, 17:23
Las animaciones se basan en pintar un gráfico distinto en cada frame, cada vez que pintes la pantalla con SDL_Flip(). También puedes necesitar usar SDL_Delay() para ajustar la velocidad.

Hay un libro muy bueno sobre SDL y C, escrito en un lenguaje muy comprensible y en español. El autor lo ofrece en PDF y también puedes pedirlo en papel, no es caro.

http://www.agserrano.com/publi.html