La verdad es que esto me lo estoy planteando muy seriamente, y quisiera conocer opiniones de veteranos para tomar una decisión.
En mis ratos libres, a veces programo (menuda sorpresa xD). Soy MUY nulo en esto, pero quiero entender aunque sea lo último que haga.
Mi problema son las PAlib. Según tengo entendido, las PAlib simplemente es un compilador que usa las libNDS basándose en órdenes sencillas. Vamos, que en lugar de decirle a las librerías directamente "coge tu dedo y presiona ese botón, porque quiero que enciendas la luz", le dices a las PAlib "haz que las librerías que enciendan la luz, no me importan los pasos que necesites para transmitir la orden". He aquí mi problema, porque no sé si es que yo me exijo cosas por encima de mi nivel, por encima de la, según oigo decir, limitada comprensión (no compresión, ojo) de PAlib, la cuestión es que cada 5 minutos tengo un problema o bug distinto EN TODOS MIS PROYECTOS. Y lo peor, es que para solucionarlos tengo que meter unos líos de variables, operaciones y líneas, que me queda el código tan lioso y embarrado que, si me vuelve a aparecer otro bug, tengo la dificultad añadida de solucionarlo sin jod** el resto de código. Imaginaos el lío si de media meto 3 variables para solucionar 1 bug.
Puede ser que esto sea por la estructura tan estructurada (y nunca mejor dicho) de PAlib, puede que no. La cuestión es que sólo he mirado hasta las matemáticas de punto fijo, y mis bugs ya son demasiado grandes como para intentar seguir. Siento que mientras no solucione esto, no podré seguir con cosas más complicadas. (llevo casi 3 meses estancado).
Pero ésa no es la única razón. Aún lo poco que he aprendido por los tutoriales, yo ya "indago" cómo hacer las cosas, y más o menos he salido del paso, claro que dejando el código como comenté más arriba. Una simple gravedad ya se me resiste, y esto es una situación que me desespera.
Y ahora llego a mi pregunta: Tengo entendido que las libNDS, usándolas de forma independiente a PAlib, son 134073207 veces más flexibles, ofrecen más posibilidades y menos problemas. Después de estar 3 meses batallando con códigos que se me enrollan hasta hacerlos imposibles de compilar, creo que este problema se debe a los propios límites de PAlib. Quisiera probar, aunque sólo sea para cerciorarme, si con las libNDS, si acaso tengo los mismos problemas, por lo menos podré tener el código más flexible y menos restricciones respecto a lo que hacer.
¿Sería una buena idea o sería una gilipollez? No busco simplificarme la vida, simplemente busco poder hacer un proyecto sin paralizarlo a la mitad, y así tener algo.
Y me gustaría opiniones profesionales en sentido de si me convendría para mi aprendizaje, o si debería seguir con PAlib. Que se abstengan de comentar los que no saben del tema, por favor.
Salu2
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.
Hola, no creo que tu
Hola, no creo que tu problema sean la Palib, sino mas bien que tal vez necesitas aprender un poco más, por lo que comentas tienes problemas en la creación del programa, palib no son ningun compilador, ni ningun lenguaje como dicen por ahí, simplemente son una serie de funciones que contienen a su vez funciones de libnds, y algun que otro programilla para simplificar el proceso de creación de una aplicacion o un juego.
Por ejemplo en libnds para iniciar el modo 2d tendrias que poner todo esto mas o menos:
powerON(POWER_ALL);
REG_POWERCNT &= ~SWITCH_SCREENS;
videoSetMode( MODE_0_2D |
DISPLAY_SPR_ACTIVE |
DISPLAY_SPR_1D |
DISPLAY_SPR_1D_SIZE_128|
DISPLAY_SPR_1D_BMP
);
videoSetModeSub( MODE_0_2D |
DISPLAY_SPR_ACTIVE |
DISPLAY_SPR_1D |
DISPLAY_SPR_1D_SIZE_128|
DISPLAY_SPR_1D_BMP
);
vramSetMainBanks(VRAM_A_MAIN_SPRITE,VRAM_B_MAIN_BG_0x06000000,VRAM_C_SUB_BG,VRAM_D_SUB_SPRITE);
Pero claro hacer esto cada vez que quieras iniciar el modo 2d es un tostón, así que lo que se suele hacer es meterlo en una función, como hacen en palib:
void PA_Init2D(void){
powerON(POWER_ALL);
REG_POWERCNT &= ~SWITCH_SCREENS;
videoSetMode( MODE_0_2D |
DISPLAY_SPR_ACTIVE |
DISPLAY_SPR_1D |
DISPLAY_SPR_1D_SIZE_128|
DISPLAY_SPR_1D_BMP
);
videoSetModeSub( MODE_0_2D |
DISPLAY_SPR_ACTIVE |
DISPLAY_SPR_1D |
DISPLAY_SPR_1D_SIZE_128|
DISPLAY_SPR_1D_BMP
);
vramSetMainBanks(VRAM_A_MAIN_SPRITE,VRAM_B_MAIN_BG_0x06000000,VRAM_C_SUB_BG,VRAM_D_SUB_SPRITE);
}
de esta manera cada vez que quiera iniciar este modo solo tendrás que poner PA_Init2D(), estas cosas son esenciales en programacion, porque primero te ahorras tiempo, y segundo el codigo es mas limpio.
Palib tiene sus limitaciones, ya que utilizan una version de libnds, que está ya algo anticuada, las nuevas libnds traen algunas mejoras mas, tambien palib tiene algun que otro bug.
Creo que si te metes con las libnds sin dominar mas o menos lo básico, puede hacer que te lies más, tambien depende de lo que quieras hacer, si tu objetivo solo es el de hacer juegos, utiliza lo que mas facil te resulte(palib), pero si lo que quieres es conocer mas la consola, o ver que es lo que puedes hacer XD utiliza libnds.
Son simplemente dos opciones, una mas sencilla y otra algo mas compleja, en una ya tienes las funciones basicas creadas y en la otra las tienes que crear tu :), yo por ejemplo ahora que estoy con trasteando con wii he tenido que crearme una pequeña librería, para simplificar ciertas cosas, y crear otras.
Espero que esto te oriente :)
saludos
Mi blog: http://creandomisvideojuegos.blogspot.com
Lo primero
gracias por tu explicación. Ya tenía una idea de que si me metía en las libNDS sería como tirarme de un quinto en lugar de tirarme 5 veces desde un 1º, pero no me asusta, porque precisamente al tener más desarrollado el código (por decirlo de algún modo), podría ver claras algunas cosas, no todo es preparar 2d, 3d o 4d, como los textos: una función para prepararlos y otra para ejecutarlos. Todos sabemos que si no se prepara, no se ejecuta, ¿no?
Realmente al principio pensé en Lua, pero si no están ya obsoletas lo estarán, ademas que creo que usa lenguaje propio.
Y la verdad es que la cosa me preocupa, porque voy a empezar bachiller y me gustaría dedicarme a la programación de forma profesional. Aún estoy a tiempo de mirar si realmente valgo para esto, y no quiero tener que arrepentirme después.
Salu2
PD: No sé si estoy en lo cierto, pero yo siempre entendí PAlib como un "resumen" de las libNDS. Usando tu ejemplo de arriba, iniciar las 2d poniendo en lugar de todo ese párrafo una simple línea. Y como todos saben, las propias librerías iniciándolas en un orden concreto ya tienen bugs propios.
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.
Si, mas o meno es eso, una
Si, mas o meno es eso, una simplificacion, pero digamos que libnds es como una caja llena de piezas de todo tipo, y palib lo que hace es reunir unas cuantas para formar ciertas funciones y programas, si esas funciones y programas estan mal montadas tendrán fallos, que es lo que le pasa a palib, yo lo que hago es ir remendandolas, según lo necesito XD, pero reconozco que es mejor y mas didactico crearte tus propias librerias o algunas funciones con libnds, porque ahi el limite lo pones tu, por ejemplo knightfox se está creando sus propias librerias :).
Pero hay que tener clara una cosa, si nó dominas en este caso c/c++ al menos a nivel medio, no te será util indagar en ese tema, porque solo conseguirás liarte más (lo digo por experiencia XD) y al final es como construir la casa por el tejado.
PD: No te preocupes, programar es fácil, lo dificil es ser bueno XD
saludetes!
Mi blog: http://creandomisvideojuegos.blogspot.com