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

si, ya, todo eso me lo estoy mamando, pero llega un momento que no lo pillo:

Empieza el programa y hay tres señales que no termina de cuajar:process jkeys_controller()
private
i;
begin
signal_action( s_kill, s_ign );
signal( type jkeys_controller, s_kill );
signal_action( s_kill, s_dfl );

matamos a s_ign y s_dfl que no se lo que serán, posiblemente funciones internas, pero tambien matamos a la conocida jkeys_controllers que es la que hemos hecho anteriormente... ni idea porqué tanto crimen, pero sigamos
En el bloque for, comprobamos si el boton pulsado corresponde a la tecla o viceversa, esto es fácil.
if ( os_id == OS_GP2X_WIZ && joy_number() ) /* Wiz */
Esto me supongo que servirá lo mismo para caanoo...
jkeys_state[ _JKEY_UP] |= joy_getbutton( 0, _JKEY_UP);

Ahora bien, esto de que una cosa no es igual que la otra ya me desconcierta...
no se, veo que hay una función y un proceso que interpretan lo pulsado en uno o en otro caso pero no lo comprendo, que es lo que me gustaría, porque una vez que veo la luz ya puedo salir de tunel... (joé que cursi)

Drumpi

Pues he mirado la documentación y, por lo que veo, tanta señal s_kill es una forma de matar a todos los procesos de control de teclas, salvo al que se está ejecutando, de manera que sólo haya un único proceso de control de teclas (es como un singleton pero al revés).
Según esto:
http://wiki.bennugd.org/index.php?title=Signal_action
http://wiki.bennugd.org/index.php?title=Signal
El primer signal_action hace que este proceso ignore cualquier signal que se le envíe. Luego se envía una señal s_kill a todos los procesos jkey_controller, que no sabía que se podía hacer así. Así sólo quedará este proceso vivo porque lo está ignorando. Y por último, el segundo signal_action restaura el comportamiento habitual de las señales.

Personalmente prefiero llevar un control más individualizado con los signals, pero me lo apunto como mejora para el Echo, así elimino unos cuantos bucles.

El OS_ID ten cuidado porque en el Echo yo tengo una constante llamada OS_CAANOO, por lo que es muy probable que no, que no sirva sólo con eso.

Y ojo con esto:
jkeys_state[ _JKEY_UP] |= joy_getbutton( 0, _JKEY_UP);

Esa operación no es != si no |= que es MUY diferente. Funciona de manera similar a los operadores +=, -= o *=, en este caso, para que lo entiendas, es una contracción de la siguiente línea:
jkeys_state[ _JKEY_UP] = jkeys_state[ _JKEY_UP] | joy_getbutton( 0, _JKEY_UP);
Es una operación OR, asigna a jkeys_state[ _JKEY_UP] un valor true si él o la operación joy_getbutton valen true. Es una forma de comprobar si se ha pulsado una dirección mediante dos métodos diferentes.

Luego, hacia el final, usas el mismo operador OR contraido para asignar true a las 4 direcciones principales si se ha pulsado algún botón diagonal. Así sólo tienes que comprobar arriba, abajo, izquierda y derecha para que el prota responda, porque como ya te he dicho anteriormente, en GP2X, si se pulsa la diagonal arriba-izquierda, ni arriba ni izquierda valen true.
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

#242
Es interesante, igual me viene bien para una cosa que estoy preparando...

Lo que busco es una pregunta y si no se cumple se pregunta otra, y si no se cumple, etc. Pongo un ejemplo:

if (idprimera.local == true)
    hace una cosa;
else
    if (idsegunda.local == true)
        hace otra cosa;
    else
        if (idtercera.local == true)
            hace una tercera cosa;
        else
            hace una cuarta cosa;
        end
    end
end


que ahora mirandolo así no me parece tan malo, aunque me gustaría saber si se corresponde a lo mismo o no tiene nada que ver...

Por cierto, voy a probar a ver si funciona lo que he puesto ;)
Nope, no es eso lo que quería, probaré con ELIF o ELSEIF
if (idprimera.local == true)    hace una cosa;else-se supone que todo lo siguiente debería ser si es false-
    hace otra;(y si no hace eso)    o hace una tercera
(y si no hace eso)    o hace una cuarta    etc...end

Lo que quiero es que si no se cumple una primera se comprueba cual de las demas se cumplen y ejecuta la que se cumple

Yawin

#243
No se si es viable lo que te voy a proponer, pero creo que podría ser muy interesante:
En un array guardas un puntero a cada id. Llamémoslo id_array (asumiremos también que tienes una variable llamada id_array_cont que guarda la cantidad de elementos que tienes). Y harías algo como esto:

int accion = -1;
from i = 0 to id_array_cont-1 step 1;
    if (id_array == true)
           accion = i;
           break;
    end
end
switch(accion)
     case 0:
           Hace una cosa
     end
     case 1:
           Hace otra cosa
     end
     case 2:
           Hace una tercera cosa
     end
    ...
end
No sé si Bennu tiene punteros a funciones. De ser así, se podría hacer aún más elegante. Pero bueno, creo que esto te podría servir.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Futu-block

No te creas que me ha venío bien...

Ahora el problema está en que me he instalado linux mint y no consigo hacerfuncionar bennu, el problema de siempre...

Aunque tengo un pc nuevo con windows 10 y puedo programar con windrios, me gusta mas el rollito de linux, con el que he estado los últimos ocho o nueve años y me gustaría saber porque no detecta esa librería, ¿acaso no la he descargado en el sitio correcto?

FreeYourMind

has visto si existe en la carpeta bennu ?

Futu-block

¿donde hay que poner la carpeta bennu? si fuera windros debería estar...

Futu-block

vale, ya he encotrado una solución, la primera era instalar la libreria libpng12-0 que con hacer: sudo apt-get install libpng12-0:i386 no tenía bastante, y trasteando mas dí con que tenía que instalar teamviewer y la compatibilidad de 32bit que al parecer no la tenía instalada porque o bien me daba un error en la instalación o era que que no instalaba la versión correcta, la de 64 bits:


Conclusión:Rula bien... ¿y pa que me complico tanto en hacer  que bennu funcione en linux cuando en windows va como un tiro?Bueno, en verdad no vá tambien, con esto que he implementado, con hacer doble click en cualquier .dcb te sale un mensaje de error y empieza a quedarse pillao, es gracioso porque si se compila ese .dcb en un .exe si funciona perfe. Sin embargo en este linux mint que me he instalado (antes usaba xubuntu) si funciona el 99% de veces, el otro 1% seguro que el archivo ha sido copiado malamente o algo y por eso no arranca





FreeYourMind

a ver si miro lo tuyo en unos dias

Futu-block

Por la cuenta que te trae, ja ja ja

Futu-block

#250
Tengo problemas de lecturas de gráficos, algunos se ven, otros no...
me da igual porque es en linux, ya probaré en windows y os cuento




Por supuesto estan añadidos via bennu, porque si lo arrastro pos me falla...lo mas seguro que las imagenes esten corruptas (que todavía no lo he probao en windrios)



Sip, seguro que son imagenes corruptas, porque si le meto el fexists no me lo reconoce ni me las guarda:
Que raro que la imagen sea invisible para bennu...Seguimos investigando
----------0---------------
definitivamente es eso, si intento modificarla en gimp me da problemas:
hasta que lo consigo y ya puedo guardarlas, bien arrastrando o via bennu

Es una tontada de las gordas, que me gustaría tener aquí para recordarla, no va a ser todo preguntar XD

Futu-block

Ahora lo que se me pilla es el audio (creo)


Si, tras cambiar la extensión de .ogg a .wav pa por si acaso, ya no sale el error pero el audio no se reproduce, puede ser que me falte algo de instalación, ya de por sí da problemas con el .ogg

Probaré en windows, total... T_T

Futu-block

po si, es problemas de linux con .ogg

Drumpi

Bueno, de los gráficos ni idea.
Del sonido, comprueba que tienes instaladas los codecs de audio. OGG usa la libvorbis o algo así. Linux, por defecto, sólo trae algunas librerías preinstaladas, generalmente la libres, pero no siempre.

Respecto a tu duda del ELIF o ELSIF... siempre se me olvida si Bennu lo tiene o no ^^U
Hay una forma de "emularlo" que me ha funcionado con KEY, pero no sé sis e podrá hacer con una expresión binaria:

switch (true)
case Key(_up): hazalgo(); break;
case Key(_down): otracosa(); break;
default: yoquese(); break;
end //SWITCH


(Código cortesía de Panreyes o la Momia, no recuerdo :D ) Lo mismo puedes cambiar el "Key(_up)" por "(mivariable > 0) AND (3 + otravar == 5)"


Y no, Bennu no tiene punteros a funciones (ojalá), así que hay que seguir con el sistema de llamar a una función, o a un proceso que duerma al padre hasta que termine.
Bueno, si la función es muy simple, ahí están los DEFINE
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

Gracias Drumpi por la respuesta...

·Lo de los gráficos, ni idea, simplemente copio y pego de una carpeta a otra, no se si es el gestor de archivos de este linux mint o que moví la partición del disco duro con estos archivos y dan problemas (suerte que no pasó con el p0rn porque lo pasé a cd y luego a vhs, subí a un servidor de la NASA y descargado vía telefónica en nokia 3300, je je) pero si los añado al fpg desde la carpeta correspondiente, no hay problema... ni idea, me tendré que conformar T_T

Lo del .ogg es un misterio porque cualquier reproductor me lo reproduce, valga la rebundancia, a ver que opina el maestro astilla

Y una duda mas que me surge con esto:


Teoricamente si yo uso la tecla 31 y 32 que corresponde a la S y D en teclado Qwerty, si luego juego en un teclado Dvorak, ¿las teclas serian O y E correspondiente a la posición de la S y D del Qwerty o serán las teclas Ñ y H donde se situan O y D en Dvorak?Yo ahí lo dejo, como referencia una imagen de ambos teclados:

Lo que a mi me pasa es que la 31 me corresponde a la tecla S y la 32 a la D, estén donde estén situadas, y tengo teclado dvorak