PDA

Ver la versión completa : [Ayuda] Uno nuevo y perdido



Mys
28/10/2008, 14:07
Antes de todo presentarme, aunque ya lo hice en el general. Soy uno de los flamantes poseedores de la F-100 por 60 € que HG sacó hace poco a la venta.

En lo que a la consola se refiere, más contento no puedo estar (aunque ya estoy mirando de cepillarme el stick y poner cruceta o stickBic xD).

El caso es que la compra la he hecho más que nada para empezar mi andadura por la programación de juegos ^^ Antes de que me echéis a los perricos, sí, he buscado y navegado por la red y el foro y sigo igual de perdido.

Así que si no os importa os voy a hacer un par de preguntillas, a ver si me podéis ayudar.

Lo primero poneros en antecedentes: me he bajado el SDK oficial de 81 Mb de la wiki de GP32Spain, para Windows. Está instalado y creo que por ahora tira bien. Al menos ejemplos simples en SDL los compila bien.

Para probarlo he metido el .gpe en la SD y lo he ejecutado en la consola y no va, sale pantalla negra. Por ahí he leído que se debe a que no tengo las runtime de la SDL en la consola, pero mi firmware es el 3.0.0, y según he leído (también) vienen preinstaladas ya. Que conste que el ejemplo es tan chorra como inicializar el video y mostrar un BMP, no tiene ná.

Doy por sentado que estoy haciendo mil cosas mal, pero bueno :P

Otra preguntilla: ¿para probar en PC simplemente tengo que generar un .exe o necesito un emulador de terminal GP2X o algo parecido? (por ahí he leído algo de Termula, pero no me queda muy claro).

Y por ahora nada más. Agradecería cualquier comentario que me ayude a entender un poco mejor cómo ponerme con la GP2X, y algunas lecturas, que siempre son recomendadas (de SDL para GP2X concretamente, de SDL ya he leído mucho ;)).

Saludos y gracias ^_^

juanvvc
28/10/2008, 15:06
No te recomiendo el kit oficial de programación de Gp2x porque es un poco antiguo y los programas que construye "lentos". En la zona de descargas debe haber un paquete Code::blocks con un Open2x o algún otro más actualizado que el oficial. Si usas Linux te recomiendo descargar directamente la última versión de Open2x toolchain de su página web. De todas formas, si tu programa no es muy complejo debería compilar tal cual en todos y funcionar en la Gp2x.

Como supones, las librerías SDL ya deben estar incluidas en tu firmware. Mira cualquiera de estos errores comunes:

- Que coinciden mayúsculas y minúsculas en el nombre del fichero de imagen. La Gp2x distingue entre mayúsculas y minúsculas (aunque no debería) y si tu imagen no tiene el nombre adecuado, no la encontrará y tendrá un error que no ves. NO te fíes del explorador de Windows: si el nombre tiene menos de 8 letras y está todo en mayúsculas te lo muestra en minúsculas, pero lo copia en mayúsculas.
- No salgas tan cual del programa, con un "return 0;" ó "exit(0)". Tienes que llamar al menú del sistema: cambia el "exit(0)" por:



#ifdef GP2X
chdir("/usr/gp2x");
execl("gp2xmenu","gp2xmenu",NULL);
#else
exit(0);
#end


Si te programa es de menos de diez líneas publícalo aquí que te ayudemos. Además si solo usas SDL debería funcionar tal cual en tu ordenador compilando el .exe. No existen emuladores de Gp2x precisamente por lo fácil que es compilar para PC sus programas :) Termula es un emulador de terminal, es decir, algo parecido al "símbolo del sistema" de Windows ó xterm/gnome-terminal/konsole de Linux. Si quieres instalar termula en tu Gp2x puedes ejecutar tu programa desde ahí y así ves exactamente qué error te está dando el programa.

Si usas el código anterior ¡recuerda añadir el "#define GP2X" antes de compilar para Gp2x!

masteries
28/10/2008, 16:09
También puedes utilizar el lenguaje Fénix, que funciona muy bien y muy fluido; con el añadido de que lo mismo que haces en el PC funciona de forma idéntica en la GP2X.

Otra ventaja es que con Fénix el desarrollo es más rápido, lo que viene muy bien cuando eres una sola persona haciendo un juego, y al ser un lenguaje que prácticamente parece C pero con el añadido de poder ejecutar las funciones de forma concurente (lo denomina procesos); acaba siendo fácil de aprender si ya tienes una base de C.

Mys
28/10/2008, 17:20
Lo primero daros los gracias a los dos :)

Sobre el programa, lo he compilado como .exe y ha funcionado. Simplemente tengo la inicialización de vídeo, mostrar la BMP (con la correspondiente SDL_Surface, SDL_Rect y demás) y esperar a pulsar una tecla para salir. Al ejecutarlo en Windows, no obstante, he tenido que poner la SDL.dll en el mismo directorio. ¿Pueden ir por ahí los tiros? Es decir, ¿puede que no tenga las librerías instaladas? ¿Cómo puedo mirarlo en la consola?

Sobre code::blocks, nunca lo he usado, pero supongo que mejor que DevC++ será, al menos más cómodo... ¿Hay tutorial para montarse el entorno desde cero? ¿Y para Eclipse?

Y sobre Fenix, ni siquiera me había planteado usarlo pero sí, pretendo programar un juego y soy el único desarrollador, diseñador y demás. ¿Qué ventajas ofrece respecto a C? ¿Va también bajo SDL, imagino? Capitán Ignorancia al rescate :$ No pretendía meterme con otra cosa que no fuese C+SDL por el hecho de ser uno de los combos más extendidos para programación de juegos, y quería conocerlo a fondo.

Y gracias también por lo de Termula, tenía el concepto cambiado, creía que era una terminal GP2X para Unix :P

Theck
28/10/2008, 18:04
Fenix es un lenguaje interpretado, si llevas un tiempo quizá te suene DIV Games Studio, es lo mismo a nivel de sintaxis.

La sintaxis es una mezcla de C y de PASCAL si no recuerdo mal (toma pareado xD) y aunque por ser interpretado el rendimiento es menor la potencia en la 2X da de sobras para hacer la mayoría de juegos.

Otra de sus ventajas es que como DIV fue pensado directamente para hacer juegos tiene muchas funciones ya hechas que te serán de utilidad, como la detección de colisiones, por decir una.

chemaris
28/10/2008, 18:23
antetodo, bienvenido a esta, nuestra comunidad :brindis:

para hacer juegos en 2D fenix esta muy bien y simplifica mucho el trabajo (sobre todo el tratamiento de graficos e interacion entre procesos), ademas a no ser que quieras hacer algo muy bestia va bastante bien en la gp2x.

juanvvc
28/10/2008, 18:41
¿Cómo puedo mirarlo en la consola?

El 3.0.0 ya las tiene incluidas, pero si te hace ilusión mirarlo instala termula y ejecuta dentro de termula "ls /usr/lib/*SDL*" para verlas :)


¿Hay tutorial para montarse el entorno desde cero? ¿Y para Eclipse?

Creo que el paquete de Code::blocks ya está montado y solo es instalarlo y programar. Si quieres usar Eclipse tendrás que configurarlo tú mismo, pero no tiene nada especial: instala algún SDK como el de Open2x y haz que los compiladores de Eclipse apunten al GCC del SDK. No sé si se me entiende...


¿Qué ventajas ofrece (Fenix) respecto a C? ¿Va también bajo SDL, imagino?

Fénix es sencillo de aprender y programar. Va sobre SDL pero no te enteras porque no accedes directamente a ninguna de sus funciones. El concepto de procesos en paralelo es muy intuitivo para los juegos. Además tiene ya las funciones gráficas más importantes (pintar, giros, escalados...) Es muy fácil hacer juegos en Fenix. La parte mala es que no es tan fácil hacer cualquier cosa que no sean juegos, es más lento que C+SDL y mucho más que C+minilib y si lo que quieres es avanzar profesionalmente es más difícil poner en el currículum "programador de Fenix" que "programador de C" :)

Pon aquí tu programa en C/SDL con la imagen para que podamos probarlo nosotros.

hardyx
28/10/2008, 18:51
Para C+SDL te recomiendo el kit codeblocks de la zona de descargas que es más actual y optimizado, además éste ya viene configurado. Aunque Fénix es mucho más fácil de usar. Además es bastante eficiente, ya que interpreta un código precompilado al igual que hace Java.

Cuando te sale la pantalla negra en algún programa, normalmente ha "reventado" por algún fallo. Por ejemplo que no haya encontrado el archivo bmp y al pintar el gráfico revienta, o que falta alguna librería. Con la F100 es fácil depurar, busca "serial usb gadget" en la zona de descargas, y con esto y el cable usb podrás ver los mensajes que te está diciendo la consola.

Suerte y bienvenido.

efegea
28/10/2008, 19:07
Siento no poder ayudar más, porque no recuerdo cuáles eran los parámetros exactos, pero ¿no podría estar inicializando mal las SDL? Recuerdo que había que especificar unos parámetros concretos. A ver si alguien los recuerda...

juanvvc
28/10/2008, 19:13
En eso efegea tiene mucha razón. Una SDL inicializada incorrectamente en la Gp2x no funciona. Prueba con esto:



SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO | SDL_INIT_TIMER);
screen = SDL_SetVideoMode(320, 240, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_ShowCursor (0);
SDL_JoystickOpen(0);

hardyx
28/10/2008, 21:52
Yo diría que la consola no admite superficies con doble buffer SDL_DOUBLEBUF. Si no te va el código de arriba, prueba a quitarle este flag.

Mys
29/10/2008, 01:09
Bueno, ya ha funcionado. Podéis insultarme: se me había olvidado meter la .bmp con el .gpe :P Tras esto (de lo que jamás os acordaréis, por favor xD), por partes.

Sobre Fenix, por ahora no voy a usarlo. No será por ganas de aprenderlo o por no querer facilitarme el trabajo, sino por como decís, porque quiero dominar esto un poco mejor. No quiero abstracciones de alto nivel o envoltorios, prefiero tirar a fuego de SDL y C, aunque está claro que no va a ser un camino de rosas, ni corto. No obstante en el futuro espero poder hacer algo en Fenix, o incluso Python, que lo conozco y es una pequeña delicia.

Sobre code::blocks, ahora ya no son horas, pero mañana si puedo saco un rato, lo instalo y ya os contaré.

Sobre la optimización del código y demás. Mi idea no es hacer nada del otro jueves, intentaré hacer un shoot'em up del que ya veremos qué grado de complicación, aunque eso es cosa más de idea que de librería. Me gustaría, incluso, hacer un remake (mi avatar os dará ideas), más que nada por el tema sprites, mi nivel de diseño gráfico no llega a la creación de sprites decentes, y aparte, tampoco tengo tiempo de aparte de programar ponerme a hacer los sprites. Intentaré tirar de librerías GPL o de ripeos de juegos, que algunos he encontrado.

Ah, y sobre los parámetros de inicalización, tengo

screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE );

Según había leído no, el doble búfer no lo soporta.

Y para finalizar, sobre la conexión por USB, había leído el tutorial de conexión por USB en inglés, en la wiki de GP2X, y cuando estaba a la mitad se me acabaron las pilas y no pude seguir, pero si hay un gadget por la zona de descargas, también le echaré un ojo.

Muchísimas gracias a todos, así da gusto :D

juanvvc
29/10/2008, 04:00
Bueno, el código de arriba con su doble buffer lo he sacado de mi menú para fba2x, y ninguno se ha quejado de que no funcionase :D Supongo que los chicos de Open2x corrigirían el error en las SDL que impedía que funcionase el doble buffer en versiones antiguas de la SDL :)

< - >
Por cierto, Python en la Gp2x está bastante bien y usa Pygame, que es una fina capa sobre SDL. Empezando con Python aprendes los rudimentos de SDL y luego es más fácil C+SDL. Ahora, los hombres de verdad usan C+minilib y acceso directo al framebuffer :D

Mys
29/10/2008, 10:24
Pregunta rápida. En la zona de descargas no he encontrado el Code::blocks. He buscado y en Gp2x File Archive lo tienen, supongo que con ese valdrá. Os pondría el enlace, pero aún no puedo.

Sobre mi hombría, se queda a medio camino xD ¿La minilib qué es exactamente?

Edit: por cierto, dado que mi intención es hacer un shoot'em up plataformero, ¿hay alguna guía, tutorial o texto explicativo de cómo acometer la programación de este tipo de juegos?

juanvvc
29/10/2008, 12:52
El del archive valdrá, claro. La minilib es una librería "pequeña" (minimal library, se llama) que maneja el framebuffer de la consola y poco más. Te da acceso directo al hardware para que lo disfrutes. Es más complejo de programar y no es portable entre sistemas, pero es lo más rápido. Por eso todos los emuladores están hechos con la minimal.

Para acabar, los plataformas son de los juegos más difíciles para empezar porque necesitan un "mapa de durezas" externo y muchos gráficos. Por eso hay tan pocos plataformas homebrew en la consola. Casi mejor te diría que cambies de idea jueguil... Si te apetece seguir, yo el único libro de videojuegos que he leído con un capítulo por tipo de juego, incluido plataformas, es "Programación Avanzada en Div". Te dará algunas ideas para empezar, pero el código es Div/Fenix y no C :)

Mys
29/10/2008, 13:29
Pues por ahora la minilib no me compensa.

Con respecto al plataformas, solo de pensar cada punto a controlar me vuelvo un poco loco, pero realmente es lo que me ilusiona hacer: mi idea ha pasado de shooter de naves a juegos de lógica (eso tras jugar al genial Professor Layton de DS) pasando por una aventura gráfica.

Realmente soy consciente de la complicación que tiene un plataformas, tanto a nivel programático como a nivel visual. Pero no me asusto (al menos ahora, con la emoción inicial), quiero entrar de lleno en este mundillo, y aunque la experiencia inicial programando algo más simple siempre me ayudaría, querría sumergirme de lleno en esto. Y sobre gráficos, tengo pensado usar ripeos de otros juegos (poniéndolo en los créditos, claro :P), que me facilitaría mucho las cosas en ese aspecto.

Vamos, soy consciente de que me estoy metiendo en un campo de minas, pero ilusión no falta ^^

De todos modos voy a leerme los fuentes de algún plataformas libre que ande por ahí para aprender un poco los intringulis del género.

Gracias Juan.

EDIT: de todos modos, un mapa de durezas es un mapa de tiles con los valores cambiados (0 o 1) según corresponda, ¿no? ¿Te referías a que era complicado o tedioso? Lo segundo está claro, pero lo primero no lo parece, ¿no?

Drumpi
31/10/2008, 20:13
Es muy fácil hacer juegos en Fenix. La parte mala es que no es tan fácil hacer cualquier cosa que no sean juegos

Esto me duele cada vez que lo dicen, así que os dejo dos enlaces:
Tilemap Editor (http://www.fenixworld.com/e107_plugins//depot/files/fw75.tilemapeditor050907.zip) (con la version 1.0 del motor de tiles de Drumpi, la más lenta y pesada, nada que ver con la v3).
Venturer (venturer.esp.st) Editor de aventuras conversacionales con gráficos para PC, pendiente de remodelación.

Un juego de plataformas ya te digo yo que es complicado. Por ahi está el Castle of Dr Malvado, directamente de DIV a Fenix, con código fuente y sin usar tiles, que es lo más sencillo y un suplicio para la limitada RAM de gp2x. Usando Tiles, primero debes currarte un motor de scroll tileado, luego las físicas como en el susodicho juego, y de las durezas por tiles mejor ni te cuento (sobre todo si el personaje tiene dos tiles de altura y usas 40 durezas distintas :D). Si buscas por el foro, yo hice FenixLand para GP2X en version de prueba, creo que va con el código, por si te quieres asustar :P Eso si, made in fenix.

juanvvc
01/11/2008, 17:42
Venturer (venturer.esp.st) Editor de aventuras conversacionales con gráficos para PC

Mira . Es un lenguaje especialmente pensado para aventuras conversacionales. Esto es un programa válido en Inform7:



"Starry Void"

The Center Ring is a room.

The magician's booth is a door. "[if in Center Ring]A magician's booth stands in the corner, painted dark blue with glittering gold stars.[otherwise if the magician's booth is closed]A crack of light indicates the way back out to the center ring.[otherwise]The door stands open to the outside.[end if]".


Inform7 es solo un lenguaje sobre la máquina Z. Hay gente que ha hecho menús de texto para seleccionar aplicaciones o incluso un Pong sobre la [url=http://en.wikipedia.org/wiki/Z-machine]máquina Z (]Inform7[/url). ¿Significa eso que sirve para cualquier cosa porque se puede hacer cualquier cosa (es completo (http://es.wikipedia.org/wiki/Máquina_de_Turing))? No, en absoluto. Sirve para aventuras conversacionales y aunque en teoría podrías escribir un sistema operativo con él, el trabajo necesario es eterno.

Drumpi
02/11/2008, 03:48
Vale, pero entonces no me digais que C sirve para todo, porque el trabajo para hacer un videojuego es eterno si no se usan cosas como SDL, OpenGL, OpenAL, DirectX... :D:D:D:D
Es que me toca la fibra sensible, se menosprecia un lenguaje que, segun yo lo veo, está orientado al manejo de imágenes y a la programación (pseudo)concurrente ;)

Por cierto, Venturer no llegará jamás a ese grado de complejidad, mis conocimientos de programación, pese a usar Fenix, no llega a tanto. De momento funciona de maravilla con tan solo 30 instrucciones que van aumentando poco a poco.

(...)
Ejecutar fundido 1 4;
Descargar texto;
Final;

juanvvc
02/11/2008, 13:28
Es que me toca la fibra sensible, se menosprecia un lenguaje que, segun yo lo veo, está orientado al manejo de imágenes y a la programación (pseudo)concurrente ;)

Exactamente eso es lo que digo y no se me ocurre menospreciar nada :) Fenix es estupendo para cualquier cosa que necesite gráficos y procesos paralelos (verbigratia, videojuegos) pero horrendo para procesamiento de datos, por ejemplo.

C es horrendo para hacer cualquier cosa. Pero es flexible y rápido. Ensamblador es aún más horrendo, más flexible y más rápido :D Se trata de escoger en cada momento la mejor herramienta para llegar a tus objetivos.