Tontadas y pamplinas + Otras dudas

Started by Futu-block, August 19, 2016, 01:28:24 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

¿Son problemas de librerías png o del fpg?


en windows no me pasa ni en el Xubuntu antiguo, pasa en linux mint, y estoy optimizando el código para ya de paso busco el problema, si lo hay, claro

Drumpi

Lo del teclado depende de cómo esté diseñado SDL. Los códigos de teclas varían de un teclado a otro, o eso dicen, pero es posible que las teclas "habituales" tengan siempre el mismo código numérico. A saber. En esos casos, un simple programita que te diga la key que se está pulsando y a tirar millas.

Por qué te hace eso la imagen en Linux y no en Windows no tengo ni idea. ¿Puede que uses una versión diferente de Bennu en un caso y en otro? Yo es que nunca he usado gráficos en 32 bits porque nunca los he necesitado, y cuando he podido, he ido tan pillado de tiempo que no quería perderlo en hacer pruebas y demás :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

#257
Gracias Drumpi, mas o menos voy sacando la solución a base de toquetear el programa, todavía se aprende poquito a poco...

Otra cosa que parece fácil es guardar el fpg con los puntos de control pertinentes en el gráfico en cuestión...
probaré con SET_POINT ( LIBRERIA, GRAFICO, NÚMERO, X, Y )

antes de guardar el fpg a ver (y seguir tanteando el terreno)
Y........ ahora es cuando viene el trabajar con textos, me dá una pereza absoluta...
pero, iré posteando aqui en plan recordatorio, gracias por aguantarme T_TU
------------------------------------------------*---------------------------------------

¿es un error? ¿es normal? pasa esto:



Drumpi

Perdona que no haya respondido antes, pero cuando llego a casa lo último que me apetece es encender el ordenador.
De todas formas, me mandas un mensaje por whasapp o por telegram y vengo a responderte en cuanto tenga un rato.

No, lo que te está diciendo son warnings. No son errores, sólo son avisos de que se te ha olvidado hacer algo, pero que Bennu es tan inteligente que lo puede resolver por sí mismo. No obstante, eso no te asegura que funcione exactamente como tú quieres, así que es recomendable que le eches un vistazo y lo soluciones.
Por lo general, los programadores suelen pasar de los warnings, pero yo creo que si quieres llegar a ser un buen programador, debes corregir el código para evitar que salgan... ¡Y no me refiero a poner "ignores" para que dejen de aparecer :D

En tu caso, en esas líneas tienes una variable tipo CHAR o una cadena de ellas, que estás usando como si fuera una STRING. En general no debería darte problemas, pero hacer una conversión a mano puede ser recomendable.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Otra, que seguro que me echabais de menos...

En esta vez, la idea es pillar el primer fpg que haya en la carpeta y cargarlo, si hay mas pasamos de ellos porque la idea como ya he dicho es pillar solo uno, cada usuario se encargará de poner el que quiera, pero la intención ya he dicho es usar un fpg sin importar el nombre... (ya está que me enrollo)

Como es algo que comenté en este hilo, he ido a buscarlo y he podido sacar este código, que me mira todos los fpg y me los escribe, hasta ahí todo bien:

    archivo = glob("*.fpg");        // GLOB = busca archivo tal  = en este caso fpg
    while (archivo != "")                     //mientras archivo no este en blanco
        write(0,10,cont*10,0, archivo); //escribimos el nombre del archivo...
        cont=cont+1; //avanzamos una linea
        archivo=glob("*.fpg"); //buscamos otro archivo
    end

    load_fpg(+archivo+".fpg");


El problema viene cuando toca cargar ese fpg y no  hay manera...
¿es normal?
¿hay que hacer algo mas? ---> quizas quitar ese +archivo+ antes del ".fpg"...?[/s} Nope, eso no sirve




warrior_rockk


En el código que has puesto, a la hora de cargar archivo, este ya está en blanco porque has recorrido todos los archivos posibles. Por eso sale del while , de hecho.
Si quieres cargar el primero, deberías guardar en otra variable la primera busqueda de glob y utilizar otra variable para recorrer el resto.

Por otro lado,cada vez que se llama a glob, se rellena la estructura global Fileinfo con la información del resultado de la última llamada a glob. Con lo que, si no quieres complicarte con el formato String que devuelve glob, puedes consultar fileinfo.path y fileinfo.name que contendrán tanto la ruta como el nombre del archivo que devolvió glob. Aquí tienes mas información:
http://wiki.bennugd.org/index.php?title=Fileinfo




Futu-block

cierto, lo que guarda es el "" porque sale del bucle...

La respuesta correcta debería ser esta, que curiosamente la había probado antes y no servía:

    archivo = glob("*.fpg");
    load_fpg(+archivo+".fpg");


La clave es poner load_fpg(archivo); porque escribía todo el nombre del archivo y le añadía .fpg

Gracias  warrior_rockk karma++


Drumpi

#262
Futu está en lo cierto: archivo vale "" porque es el valor que se queda al salir del bucle.
PERO MUCHO OJO: la solución no es poner load_fpg dentro del bucle, porque estarías cargando todos y cada uno de los FPGs que se encuentren en esa carpeta (y encima no los estás descargando).
Lo ideal es que tengas otra string donde guardes "archivo" justo antes de la siguiente llamada a GLOB, y que la uses para cargar en lugar de "archivo".

Otra cosa: cuando dices "primer FPG" ¿Te refieres al primero que encuentre? porque entonces el bucle no es necesario. ¿Al primero alfabéticamente? porque te recuerdo que GLOB no te los da ordenados... Y además, en tu código estás cogiendo el último, que dado cómo funciona GLOB, será el último que se creó.
En el editor de mapas de tiles hay un fichero .inc que tiene funciones para cargar y ordenar ficheros. Como siempre, está sin documentar, pero si le echas un vistazo y experimentas un poco (sin leer el código, basta con que mires los nombres de las funciones) lo mismo te sirve... O no, no sé, tengo que volver a mirar el código ^^U
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

si, es para hacer un .exe y meterlo en una carpeta que tenga un solo fpg, si tiene mas que le zurzan, y me da igual como lo pille GLOB...

lo de descargar los fpg no lo sabía, y lo de poner los strings delante, menos, está bien saber estas cosas, hay veces que cambio una linea de sitio y funciona y no se por que y de esta manera lo comprendo, gracias

Drumpi

Sí sólo va a haber un FPG ¿por qué usar un bucle? :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Tu sabe, solo por conocimiento...

Otra:
-Trato de hacer un movimiento por cuadricula, ya que le he quitado el bloque for dentro del loop y a base de variables sumatorias he llegado a comprender el funcionamiento, pero el problema está en que me hace diagonales y no quiero...

Se que en su dia Splinter puso algo como esto:
direcion=(key(_up)?1h:0)|(key(_down)?2h:0)|(key(_left)?4h:0)|(key(_right)?8h:0); y me gustaría entenderlo un poco, a ver si sirve para que no me haga diagonales

Drumpi

Eso tal cual no te va a servir. Esa línea de código lo que hace es asignar un 1 o un 0 a diferentes bits del "direcion", según si se ha pulsado un botón.

Por ejemplo:
key(_up)?1h:0
Traducido a código más fácilmente entendible es:
if (key(_up)
    return 1h; (valor 1 en hexadecimal)
else
    return 0;
end


Entonces, si se pulsa arriba el bit menos significativo se pone a uno, si se pulsa abajo el segundo bit se pone a uno, si se pulsa izquierda, el tercero se pone a uno, y si se pulsa derecha lo hace el cuarto. Ojo, que esto no es excluyente: se pueden pulsar dos tres o cuatro direcciones y activar sus correspondientes bits.
Así, en una sola variable puedes saber qué botones se han pulsado o no:
1 - 00000001: sólo arriba.
2 - 00000010: sólo abajo.
3 - 00000011: arriba y abajo
4 - 00000100: sólo izquierda.
5 - 00000101: arriba e izquierda.
... y así el resto. Luego, comprueba el valor para hacer una cosa u otra.


Puedes usar un sistema de detección por prioridad:
if (key(_up))
    moverArriba();
elsif (key(_down))
    moverAbajo();
elsif (key(_left))
    moverIzquierda();
elsif (key(_right))
    moverDerecha();
end


O bien

switch(true)
case key(_up): moverArriba() end
case key(_down): moverAbajo() end
case key(_left): moverIzquierda() end
case key(_right): moverDerecha() end
end //switch


Ojo, "moverArriba" puedes cambiarlo por los comandos "velhoriz=0; velvert=-1;" o como hayas implementado tu movimiento, no lo interpretes literalmente.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

vale vale, lo he pillao, al final lo he aplicado no exactamente como quería pero me sirve...

Ahora bien, ¿como priorizo una pulsación con respecto a otra si tengo que escribir un código de ''lineal''?
Me explico; si hay un par de botones y lo que se quiere es comprobar cual se ha pulsado antes, siempre se comprobará el primero y luego el segundo...
Creo que para eso está el elsif ¿no?

Drumpi

Sí, cualquiera de las dos estructuras que te he escrito hace exactamente lo mismo: en cuanto una condición se cumple, deja de mirar el resto. Si pulsas los 4 botones, irá hacia arriba.

Hay otras formas, pero esta es la más sencilla de explicar y entender. Ya depende de lo que te quieras complicar. Podrías hacer que al pulsar la diagonal, se dirija en la última dirección pulsada, o que no se mueva... ya eso tú decides.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

seguiré con las pruebas, pero si pulsas las 4 direcciones vá parriba y es ahí donde veo un problema, nimio y no es para tener en cuenta (ni lo tendrá) pero es a lo que vengo referirme con programación lineal, si es que no hay mas remedio que ser lineal...