PDA

Ver la versión completa : ayuda con el sdl...



boubou
20/07/2004, 10:37
hola, a ver si me podeis ayudar con esto...

es que yo de sdl no tengo mucha idea, yo soy mas bien de allegro :) el problema es que no se me muestra una imagen previamente cargada. aqui esta el codigo:


#include <gpstdio.h>
#include <gpstdlib.h>
#include <gpgraphic.h>
#include <gpfont.h>
#include <png.h>
#include <sdl.h>
#include <SDL/SDL_image.h>
void waitKey(void)
{
while(GpKeyGet()!=GPC_VK_NONE);
while(GpKeyGet()==GPC_VK_NONE);
}

void GpMain(void *argv)
{
int main(int argc, char *argv[]){
SDL_Surface *screen, *image;
SDL_Rect r;
SDL_Init(SDL_INIT_VIDEO);

image=SDL_LoadBMP("drankas.bmp");


r.w=image->w;
r.h=image->h;
r.x=(320-r.w)/2;
r.y=(240-r.h)/2;

SDL_FillRect(screen,NULL,-1);
SDL_BlitSurface(image,NULL,screen,&r);
/* Actualizamos la porcion de pantalla que ha cambiado */

SDL_UpdateRects(screen, 1, &r);

SDL_Flip(screen);
waitKey();

}

}



enga, a ver si me podeis ayudar, porfa ;)

boubou
20/07/2004, 11:43
otra cosa: no se podria portar el allegro para la yipi??

bueno en fin, solo era una proposicion... por que a mi el sdl no me mola ;)

Damizean
20/07/2004, 11:53
Creo que el fallo estará en

void GpMain(void *argv)
{
int main(int argc, char *argv[]){

una funcion dentro de otra? xD

boubou
20/07/2004, 12:03
lo de un main dentro del gpmain lo vi en un tuto, asi que cuando lo quito me salta un error.

Locke
20/07/2004, 13:09
El fallo es que no has inicializado la screen para pintar sobre ella, añade lo siguiente:

screen=SDL_SetVideoMode(320,240,16,SDL_DOUBLEBUF|S DL_HWSURFACE|SDL_HWPALETTE );

debajo de SDL_Init () a ver si te funciona.

Un saludo

boubou
20/07/2004, 19:12
asias, voy a probar a ver si rula.

Locke
20/07/2004, 19:50
Ok, ya me contaras.

Por cierto, si usas SDL_UpdateRect (..) o SDL_UpdateRects (..) no necesitas usar SDL_Flip (..), ya que hacen lo mismo.

SDL_Flip se usa para cambiar los buffers en caso de usar doble buffer (lo mas recomendable si quieres hacer un juego que mueva muchas cosas en cada frame)

Para usar SDL_UpdateRects quita el flag SDL_DOUBLEBUF de la linea que te acabo de dar. Hazlo en caso de que tu juego no mueva apenas elementos en cada frame y baste con actualizar pequeños rectangulos (como para un sokoban por ejemplo)

boubou
21/07/2004, 12:54
otra cosa, como puedo imprimir texto con el textout?, es que cuando quiero compilar no me lo reconoce.

un saludo.

Locke
21/07/2004, 13:09
#include <gpstdio.h>
#include <gpstdlib.h>
#include <gpgraphic.h>
#include <gpfont.h>

GPDRAWSURFACE screen;

GpGraphicModeSet(8, NULL);
GpLcdSurfaceGet(&screen,0);
GpSurfaceSet(&screen);
GpLcdEnable();

GpRectFill(NULL, &screen, 0, 0, 320, 240, 0);

GpTextOut(NULL,&screen,x,y,(char*)"Loquesea",0xFF);

Eso imprimiria un texto blanco en la coordenada x, y. Pero no se si se puede combinar con SDL, porque la pantalla necesita declararse como GPDRAWSURFACE, y la tuya seria SDL_Surface. Lo mejor sera que busques una libreria de SDL para manejar texto. Mira aqui a ver si alguna te sirve: http://www.libsdl.org/libraries.php (creo que en la segunda pagina habia una que tenia buena pinta)

boubou
21/07/2004, 13:53
sobre lo de la imagen se me ve un cursor (que no es el archivo que queria cargar).

Por que pasa esto?

este es el codigo:


#include <gpstdio.h>
#include <gpstdlib.h>
#include <gpgraphic.h>
#include <gpfont.h>
#include <png.h>
#include <sdl.h>
#include <SDL/SDL_image.h>

void GpMain(void *argv)
{

SDL_Surface *screen,*image;
SDL_Rect r;
SDL_Init(SDL_INIT_VIDEO);
screen=SDL_SetVideoMode(320,240,16,SDL_HWSURFACE );







image=SDL_LoadBMP("drankas.bmp");

/* Volcamos en la superficie de pantalla.
Las superficies no deberían estar bloqueadas
en este punto. */

r.w = image->w;
r.h = image->h;
r.x=0;
r.y=0;




SDL_BlitSurface(image, NULL, screen, &r);

/* Actualizamos la porcion de pantalla que ha cambiado */
SDL_UpdateRects(screen, 1, &r);







}

Locke
21/07/2004, 16:14
Respecto a lo del cursor, incluye esta linea en tu programa:

SDL_ShowCursor (SDL_DISABLE);

Para la imagen el fallo creo que esta en que no encuentra el archivo correspodiente. A mi me pasaba lo mismo, lo solucione poniendo:

image=SDL_LoadBMP ("gp:\\gpmm\\mijuego\\drankas.bmp");

Pero ahora es un poco coñazo, porque para probarlo tengo que crear una smc virtual y meter en ella el ejecutable para que tire en el geepee, pero soluciona el problema.

La utilidad para las SMC la tienes en la seccion de utilidades de esta misma pagina.

Pocket Lucho
21/07/2004, 16:35
Os recomiendo que mireis los fuentes del circus linux ya que es un juego bastante simple pero a la completo y encima el mismo fuente está ya preparado para funcionar tanto en pc, gp32 y DC. Lo teneis en la web de SDL de chui.

Locke, para tu remake del ff ( si es que es eso lo que estas haciendo ) te vendrá bien el fuente del parallax scroller demo o algo asi que tienen en GP32News ya que es, aunque simple, un engine de tiles

boubou
21/07/2004, 17:51
ya lo he conseguido, gracias tios ;) .

ahora me falta saber como poner texto, a ver si me podeis ayudar porfa :)

un saludo.

Locke
21/07/2004, 18:14
Para el texto usa esta pequeña libreria. Es extremadamente sencilla de usar y permite fuentes de tamaño variable. Solo leete los comentarios del .h y veras lo facil que es.

En el rar viene una fuente para que veas el formato, no se donde encontrar mas, si alguien sabe decirme se lo agradecere ;)

Lucho, no desveles mis proyectos secretos xD De momento estoy preparando algo para el concurso de remakes, luego si eso me lo miro ;)

boubou
21/07/2004, 18:20
muchas gracias!!!

Aiken
10/12/2004, 17:41
El fallo es que no has inicializado la screen para pintar sobre ella, añade lo siguiente:

screen=SDL_SetVideoMode(320,240,16,SDL_DOUBLEBUF|S DL_HWSURFACE|SDL_HWPALETTE );

debajo de SDL_Init () a ver si te funciona.

Un saludo

Locke!! lo he preguntado en otro post ... pero como te veo puesto en el tema ;)

Inicializo a 320x240 a 16bits, cargo un JPG y no me sale con los colores del todo decentes :( hay que hacer algo especial?

empiezo a pensar que hay algo mal, si has conseguido pintar una foto real con SDL pasame el ejemplillo o algo ;)

Aiken