Ver la versión completa : ayuda con el sdl...
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 ;)
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
lo de un main dentro del gpmain lo vi en un tuto, asi que cuando lo quito me salta un error.
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
asias, voy a probar a ver si rula.
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)
otra cosa, como puedo imprimir texto con el textout?, es que cuando quiero compilar no me lo reconoce.
un saludo.
#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)
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);
}
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
ya lo he conseguido, gracias tios ;) .
ahora me falta saber como poner texto, a ver si me podeis ayudar porfa :)
un saludo.
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 ;)
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
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.