Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Hokutoy on February 02, 2010, 04:44:57 PM

Title: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 02, 2010, 04:44:57 PM
Buenas!
Ahora que estoy en racha me estoy dedicando a crear juegos y programas varios, pero dada mi falta de experiencia a la hora de codear y, sobretodo, con la parte de las matematicas en general tengo muchas dudas que me gustaría resolver.
Para no andar abriendo y cerrando hilos he decidido usar este hilo y continuarlo a medida de que me surjan nuevas dudas.
Gracias a todos!

Empezemos...

Quiero conseguir un numero random del 1 al 10:

azar=rand(1,10);

Que forma es la mas eficiente para conseguir, por ejemplo, manteniendo cierto azar, que aparezcan los números 1,2,3 (frecuentemente), 4,5,6 (uncommon) y 7,8,9,10 (rara vez).

Consigo mi proposito pero tengo que usar un monton de rands y codigo, a mi parecer, excesivo.

Algún consejo?

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on February 02, 2010, 04:51:43 PM
si queremos una frecuencia en tres grupos donde el primero sea un 75% el segundo un 20% y el tercero el 5% restante podríamos hacer lo siguiente

frecuencia= rand (1,100); 
if ( frecuencia < 75)
  azar= rand(1,3);
elsif (frecuencia < 95)
  azar= rand(4,6);
else
  azar= rand(7,10);
end

puede optimizarse pero así queda bastante claro.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on February 03, 2010, 12:59:28 AM
Otra solución sería crear rangos y usar un único rand, algo así (estilo porcentaje):

temp=rand(1,100);
switch (temp)
case 1..20: valor=1; end
case 21..40: valor=2; end
case 41..50: valor=3; end
case 51..60: valor=4; end
case 61..70: valor=5; end
case 71..80: valor=6; end
case 81..85: valor=7; end
case 86..90: valor=8; end
case 91..95: valor=9; end
case 96..100: valor=10; end
end //switch

Es un poco largo de escribir, pero creo que es más óptimo al usar un único rand, y puedes establecer los porcentajes que quieras de forma independiente, añadir valores salteados, usar rangos mayores de 100 para más precisión...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on February 03, 2010, 09:09:21 AM
buena observación, me quedo con tu solución :D.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 03, 2010, 10:54:16 AM
Quote from: DCelso on February 03, 2010, 09:09:21 AM
buena observación, me quedo con tu solución :D.

Pues yo me quedo con las dos!

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Futu-block on February 04, 2010, 07:04:11 PM
Quote from: Drumpi on February 03, 2010, 12:59:28 AM
Otra solución sería crear rangos y usar un único rand, algo así (estilo porcentaje):

temp=rand(1,100);
switch (temp)
case 1..20: valor=1; end
case 21..40: valor=2; end
case 41..50: valor=3; end
case 51..60: valor=4; end
case 61..70: valor=5; end
case 71..80: valor=6; end
case 81..85: valor=7; end
case 86..90: valor=8; end
case 91..95: valor=9; end
case 96..100: valor=10; end
end //switch

Es un poco largo de escribir, pero creo que es más óptimo al usar un único rand, y puedes establecer los porcentajes que quieras de forma independiente, añadir valores salteados, usar rangos mayores de 100 para más precisión...

la misma que iba a ofrecer

por cierto, para un rango de 30 a 40 en el CASE se escribe co dos puntos ¿no?
CASE 30..40:
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Prg on February 05, 2010, 02:05:32 AM
Quotepor cierto, para un rango de 30 a 40 en el CASE se escribe co dos puntos ¿no?
CASE 30..40:
si
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on February 05, 2010, 02:14:31 AM
Si, los dos puntos seguidos indican un rango de valores enteros. Si separas con comas son valores individuales. Viene en los manuales básicos.
Recuerda que en los SWITCH sólo puedes usar un valor en un único CASE, por lo que si añades ese rango, tendrás que modificar el código que te he escrito ;)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 05, 2010, 12:34:42 PM
Aunque mi juego para el concurso ya ha sido enviado he pensado en hacer un pequeño update para incluir una feature que se me olvido implementar... la de "fusionar" (merge) tu tabla de records con otra tabla de records de, por ejemplo, un compañero o bajada de inet, etc... para el tema de intentar hacer torneos o intentar batir al mejor jejeje
El codigo para esta feature ya lo he codeado sin ningun problema. Ahora si junto a tu archivo Rhighscores.file copias un nuevo archivo valido (Rhighscores.file) con el nombre newRhighscores.file el juego hace una comparativa de recors y fusiona la nueva tabla quedandose guardada en el archivo Rhighscores.file.

Mi pregunta:
Hay alguna manera de eliminar físicamente del directorio el archivo newRhighscores.file que ya he fusionado y no me sirve de nada?
Algo tipo:
delete("files/newqhighscore.file");

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on February 05, 2010, 01:02:30 PM
INT RM(STRING)
Ten cuidado con lo que borras: asegurate que el archivo existe antes (FILE_EXISTS) y que no está protegido contra escritura:

STRUCT fileinfo
    STRING path;
    STRING name;
    directory;
    hidden;
    readonly;
    size;
    STRING created;
    STRING modified;
END

Por si acaso.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 05, 2010, 01:11:14 PM
Gracias Drumpi! Como siempre.
Karma++!

Porcierto... las siglas RM que significan?
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on February 05, 2010, 03:49:07 PM
REMOVE
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Futu-block on February 06, 2010, 09:36:28 AM
y hablando de switches si se puede preguntar aqui...

se puede en los CASE poner???

case 1 and 7:
case 1 or 7:
case 1 not 7
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 06, 2010, 03:09:03 PM
Quote from: Futublog on February 06, 2010, 09:36:28 AM
y hablando de switches si se puede preguntar aqui...

se puede en los CASE poner???

case 1 and 7:
case 1 or 7:
case 1 not 7

No con esa sintaxis.

Puedes usar valores (case 1:), rangos (case 1..10:), multiples valores (case 1,4,5,8:) o multiples rangos (case 1..5, 40..56:)

Igualmente mirate la wiki que creo que viene explicado.

Saludos!

PD: Este es un hilo de dudas... así que cualquier duda es bienvenida.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on February 06, 2010, 06:31:10 PM
caramba, aparentemente funciona... no me acordaba de esto, bueno, por lo menos compila.

edit: ahhh, ya veo...

no funciona como supongo supones que funciona...

lo que hace el compilador es resolver la operacion constante y asignarla al case... en el ejemplo que pusiste seria lo mismo que poner:

case 1:

case 1:

el 3ero no funciona, ya que 1 not 7 no es una expresion permitida.

porque 1 and 7 = 1
y 1 or 7 = 1
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Rein (K´)ah Al-Ghul on February 06, 2010, 06:54:19 PM
Quote from: SplinterGU on February 06, 2010, 06:31:10 PM
caramba, aparentemente funciona... no me acordaba de esto, bueno, por lo menos compila.

edit: ahhh, ya veo...

no funciona como supongo supones que funciona...

lo que hace el compilador es resolver la operacion constante y asignarla al case... en el ejemplo que pusiste seria lo mismo que poner:

case 1:

case 1:

el 3ero no funciona, ya que 1 not 7 no es una expresion permitida.

porque 1 and 7 = 1
y 1 or 7 = 1


entonces el switch se puede usar con expresiones...
mientras estas sean verdaderas y el resultado pueda ser "contante"...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on February 06, 2010, 08:12:37 PM
no se que quisiste decir... lo que yo digo es que las expresiones se pueden usar y se resuelven en el momento de compilar, no en el momento de ejecutar...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 12, 2010, 07:36:04 AM
Otra duda mas... esta vez una pregunta de eficiencia.
Que es mas eficiente dentro de un loop:
A:

IF(MOUSE.LEFT AND COLLISION(TYPE MOUSE) AND FLAGS==0);

B:

IF(COLLISION(TYPE MOUSE) AND MOUSE.LEFT AND FLAGS==0);

C:

IF(MOUSE.LEFT) IF(COLLISION(TYPE MOUSE) AND FLAGS==0);


Es decir, en el caso A se comprueba siempre las 3 condiciones o al comprobarse la primera (mouse.left) y ser falsa ya no se comprueba la colision del mouse?
Si siempre se comprueban las 3 condiciones entonces imagino que la mas eficiente será la C.
O a lo mejor no vale la pena comerse la cabeza porque la diferencia de rendimiento es mínima.

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on February 12, 2010, 08:36:46 AM
Los "and" funcionan evaluando las expresiones de izquierda a derecha y en el momento de que una no cumpla no sigue con las demás.
Así que lo más rápido es poner a la izquierda las condiciones más rápidas de realizar y las más lentas a la derecha.

Si lo piensas un poco, esto es lo lógico debido a la forma de actuar de un "and", si una no se cumple, ¿para qué seguir comprobando las demás si sé que el resultado final será falso? :D.

Como nota final, en los "or" sí que hay que comprobar todas.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on February 12, 2010, 12:27:17 PM
la mas optima no es ninguna de las 3

es esta...

IF( MOUSE.LEFT AND FLAGS==0 AND COLLISION(TYPE MOUSE) );
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 12, 2010, 03:55:28 PM
Quote from: SplinterGU on February 12, 2010, 12:27:17 PM
la mas optima no es ninguna de las 3

es esta...

IF( MOUSE.LEFT AND FLAGS==0 AND COLLISION(TYPE MOUSE) );

Gracias a los 2!

Splinter, no sería aún mas optimo:
IF( FLAGS==0 AND MOUSE.LEFT AND COLLISION(TYPE MOUSE) );

Ques es mas penalizante, comprobar el flag de un proceso o mirar si se pulsa un boton?

Asias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on February 12, 2010, 04:43:03 PM
a igual coste de tiempo de ejecución (recordemos que tanto ver flag a cero como ver el botón pulsado es comprobar una variable), es más rápida la más restrictiva.
En este caso será más facil que sea false el que esté pulsado el botón del ratón a que esté el flag a cero, que será como más normal.
Entonces si comprobamos primero el flag y casi seguro que está a cero tendrá que comprobar si está pulsado el botón del ratón haciendo así dos comprobaciones.
En cambio si comprobamos primero el ratón y vemos que no está pulsado pues terminamos y vamos a otra cosa con lo que ahorramos una ejecución.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on February 12, 2010, 06:19:48 PM
ademas, una tiene la operacion adicional "=="
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 12, 2010, 08:30:20 PM
OK! Gracias a los dos por las respuesta y, sobretodo, por las explicaciones.
Karma++!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on February 27, 2010, 03:57:07 PM
Buenas! Mas ayuda please!
Ultimamente ando jugando bastante al spout y al Alert de Wiz así que me ha picado el gusanillo de hacer un matamarcianos jejeje
Tengo un problema... no se como hacer las típicas "chispas de impacto" o "volcan de pixeles" para cuando las balas golpean al enemigo o a la pared... supongo que sabeis a que me refiero. Muy parecido al efecto de spout pero no tan exagerado y sin física.
(http://www.portabledev.com/media/DINGOO/Spoout/Spoout.png)

Al lío... para hacer las típicas chipas de impacto como se hace? Un proceso que cree un pixel y le de una trayectoria semialetoria segun el angulo de impacto y así? No lo acabo de ver claro... alguien conoce de algun ejemplo que pueda estudiar o me quiere indicar el camino correcto?

Asias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on February 27, 2010, 04:16:24 PM
Usar funciones random, que te desloquen un pixel o gráficos (unos cuantos en la colision) de forma aleatoria en los ejes XX, YY
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on February 27, 2010, 04:17:46 PM
yo haría los frames de la animación con un editor de gráficos y luego los animaría en bennugd, esto te da más versatilidad,  puedes poner distintos tamaño de pixeles, puedes poner colores distintos y consume menos tiempo de procesamiento.
A no ser que estés muy limitado de espacio y no tengas espacio para guardar las imágenes.
que podrías hacer lo que dice free.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on February 27, 2010, 05:50:15 PM
La verdad es que es una pregunta verdaderamente interesante, porque no es la primera vez que me la planteo.
Es que el tema de "partículas" es especialmente complejo en Bennu (en Fenix también lo era), porque el uso de una animación a base de mapas es la versión fácil, pero se pierde la aleatoriedad y requiere de usar muchos gráficos grandes a poco que se separen dichos pixels. Y el uso de un proceso por partícula es muy costoso computacionalmente, e inviable en GP2X y WIZ (y a las pruebas me remito ;)).

Ya se lo planteé hace tiempo a Splinter, pero creo que es un buen momento de volver a hacerlo y en público, ya que la gente se ha animado a crear módulos nuevos: sería muy buena idea tener un módulo que manejase gráficos sin estar ligados a procesos, un poco como se hace con los textos o las primitivas gráficas, se crea una instancia de gráfico que devuelve un ID, que se puede usar para llamar a funciones como move_graph, rotate_graph, delete_graph.
Esto ahorraría el tiempo de generación de procesos, el espacio que ocupa, la gestión del orden de ejecución, estados y demás.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on February 27, 2010, 08:49:02 PM
esas instancias que dices se llaman procesos...

vamos que estas haciendo lo mismo solo que estas trasladando la logica de un lado a otro... y si tu problema es la perdida de tiempo en que se ejecutan los procesos... pues nada, los pones en freeze y los manejas como tu quieres desde un proceso controlador...

definitivamente eso que pides no lo hare, porque no tiene sentido, es lo mismo y ahorrarias nada de tiempo.

:)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on February 27, 2010, 11:34:12 PM
Bueno, no se cómo irá internamente, pero ya congelo los procesos masivos y uso otro controlador para ello, y se que el mayor costo de tiempo no está en el renderizado, porque si uso menos procesos con imágenes más grandes se nota que mejora la velocidad (y es una de las pocas mejoras que me quedan por hacerle al juego para arañar algunos FPS).

Y tampoco he dicho que lo hagas tu, sólo si alguien se anima ;)
De todas maneras, a ver si me libro del sonido de una vez, que quiero empezar el motor de scroll tileado v4, y esta vez voy a bajar a los infiernos ;D (bueno, casi, el ensamblador me da miedo ^^U)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on February 28, 2010, 01:05:44 AM
no es eso, eso puede suceder por 2 factores:

1) porque estaras creando y destruyendo procesos constantemente... eso si consume...
2) porque renderizar un grafico hace mucho mas que dibujarlo, hay calculos de angulos, vertices, tamaño, etc.... entonces para la misma data total grafica, divida en 1000 fragmentos sera siempre mas lento que dividido en 100 fragmentos, para dar un ejemplo...

con windgate probamos 1000 procesos controlando cada uno un modelo en 3d, y lo mismo pero con 1 solo proceso bennu, y los 1000 modelos controlandolos por el motor 3d, y da lo mismo...

pero esto ultimo demuestra que la carga esta en el render... de hecho, si no renderizas, bennu te va a 100 de miles de fps...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 02, 2010, 08:10:50 AM
Bueno lo de las partículas en plan geiser ya lo he arreglado... al final he creado un proceso chispa() con un fpg con varios graficos de un pixel de varios colores que al invocarse toma el angulo inverso al impacto y avanzan describiendo un trayectoria semi aleatoria... angle+=rand(-10000,10000); dentro del Loop. La verdad es que el efecto es bastante vistoso y aunque se invoquen 4 o 5 chispas por cada impacto de momento no afecta en nada la rendimiento.  ;D

Otra cosa... para  mover a un personaje según su angulo uso:



angle=get_angle(id_ship);
advance(3);
frame;


Este codigo tiene el problema de que me rota al personaje en cuestión distorsionandolo cosa que para evitarlo uso lo siguiente:


angle=get_angle(id_ship);
advance(3);
angle=0;
frame;


Así le doy angle al personaje, lo desplazo, lo coloco recto otra vez y lo pinto con frame. Resultar resulta pero hay otra manera para poder mover cosas según un angle sin que afecte al pintado del sprite?

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Phoenix on March 02, 2010, 09:13:16 AM
Creo que con esto no modificaria el angulo del proceso y se moveria en angulo que quieras:



int angulo1;

angulo1=get_angle(id_ship);
xadvance(angulo1,3);


Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 03, 2010, 11:51:41 PM
Bueno si alguien quiere ver como han quedado los efectos de partículas que se fije en los impactos y en las explosiones... quedan bastante bien.  ;D
Pensar que el video va a 30 fps y el juego a 60 fps.

http://www.youtube.com/watch?v=-wi-rXMFY-w
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on March 03, 2010, 11:53:51 PM
felicidades, quedan muy resultones.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Windgate on March 03, 2010, 11:59:50 PM
Bonito efecto de partículas, ¿La nube de partículas es un único proceso con un gráfico para todas las partículas, varios procesos o MUCHOS procesos manejando cada uno de ellos una partícula? xD

Veo que por ahí arriba se habló del tema pero no he visto la conclusión.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 04, 2010, 12:12:19 AM
Quote from: Windgate on March 03, 2010, 11:59:50 PM
Bonito efecto de partículas, ¿La nube de partículas es un único proceso con un gráfico para todas las partículas, varios procesos o MUCHOS procesos manejando cada uno de ellos una partícula? xD

Veo que por ahí arriba se habló del tema pero no he visto la conclusión.
Pues va a ser lo último... cada pixel un proceso jejeje De momento no noto nada de caida de rendimiento en la Wiz con mas de 15 enemigos y el uso de estas particulas, aunque en el futuro a lo mejor me veo obligado a mejorar el tema si veo que el rendimiento se ve afectado.

PROCESS chispa (x,y,ANGLE_BACKUP,DISTANCIA)

BEGIN
file = GFX_chispa;

repeat
GRAPH=RAND(1,3);
angle_BACKUP+=rand(-10000,10000);
XADVANCE( ANGLE_BACKUP , rand(2,3) );
DISTANCIA--;
frame;


until DISTANCIA=<0;

END // OF BEGIN


Para el efecto de la nuve de particulas uso:

FOR(CONTADOR=0;CONTADOR<50;CONTADOR++)
   chispa(X,Y,RAND(0,360000),44);
END


Y para el efecto de las chispas por impacto:

FOR(CONTADOR=0;CONTADOR<5;CONTADOR++)
   chispa(who_CHOQUE.x,who_CHOQUE.y,GET_ANGLE(ID_SHIP),22);
END
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on March 04, 2010, 12:17:44 AM
quizas un poco más grandes o de diferentes tamaños y o formas no estaría mal,
ahora parece que los enemigos se desintegran de lo chicas que son.
Me recuerda al laser desintegrador de replicantes de stargate sg. :D.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 04, 2010, 03:16:02 AM
Esto sí que no me lo esperaba ¿tan buen rendimiento da en WIZ el uso de tantos procesos partículas? Después de usar proceso por tile en Echo, pensé que el rendimiento era mucho menor.
Ojalá tuviese una WIZ para probar ;D
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on March 04, 2010, 08:07:22 AM
y en la gp2x que tal te va? Drumpi.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 04, 2010, 01:58:01 PM
Pues deja que lo pruebe y os comento.
Es más, aun no he probado ni los juegos del concurso (ya veremos si no tengo que adaptar los que usan pantalla táctil), ni siquiera en PC (más allá el EEEK! y del Puzsion, ahora que por fin lo entiendo ^^U).
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 04, 2010, 02:22:48 PM
a muchos le falta el cursor del mouse en PC, mas que eso, deberian andar...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 04, 2010, 03:04:17 PM
Otra duda con el jueguecito de naves... esta vez una cosa que me pasa con el control cuando lo pruebo en el Pc.
En este juego la nave se mueve con los cursores, rota a la izquierda con "Q", rota a la derecha con "W" y se dispara con el espacio.
En la Wiz no hay problema, todas las acciones tienen mapeado su accion a un boton distinto (incluso el desplazamiento en diagonal esta mapeado al "boton" diagonal correspondiente). El problema surje con las diagonales en el PC, que se consiguen pulsando arriba/derecha, arriba/izquierda, abajo/derecha y abajo/izquierda. Hasta aquí no hay problema todo perfecto. El problema real esta cuando pulsas diagonal + rotacion + disparo que, no se si porque no se admiten tantas pulsaciones a la vez en el teclado (bennu?/Pc?/Windoes?) no realiza el movimiento en diagonal correctamente... sigue el eje horizontal o el eje vertical.
Hay alguna solucion aparte de mapear 8 teclas diferentes  para cubrir las 8 posibles direcciones?

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 04, 2010, 04:01:29 PM
en teoria no es necesario mapear las 8 teclas... a menos que quieras 8 teclas diferentes... con pulsar arriba+izq, vas a obtener dicha diagonal...

si no es eso lo que preguntabas, pregunta nuevamente.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 04, 2010, 04:17:24 PM
Retry:
En el Pc, cuando pulso izquierda (se desplaza a la izquierda), la tecla Q (rotar), el espacio(disparo), y, pulso arriba (para cambiar la direccion de izquierda a diagonal izquierda-arriba) la nave sigue hacia la izquierda.

Hay un limite (ya sea de Bennu, del teclado, del Windows o lo que sea) en el limite de teclas pulsadas simultaneamente para que sean reconocidas?

Reprobando lo que es mas curioso es que la unica diagonal que no funciona es la indicada (arriba/izquierda) las otras si se ejecutan.

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 04, 2010, 04:38:07 PM
Bueno lo dejo pa quien quiera probarlo a ver si solo me pasa a mi.
Intentar lo siguiente:
Izquierda + Q + ESPACIO y entonces haceis ARRIBA. Os va en diagonal o va hacia la izquierda y se olle un pitido del pc-speaker?
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: gecko on March 04, 2010, 05:34:15 PM
creo que es el teclado el que tiene el limite. En esos casos el speaker del gabinete hace un pitido, o eso es por lo menos asi en mi pc.

Hay algunos teclados preparados para gamers que permiten hasta 10 teclas pulsadas al mismo tiempo, pero no son de lo mas barato que digamos.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 04, 2010, 05:37:15 PM
Lo curioso es que si haces lo mismo pero en otra diagonal SI funciona... solo falla la Diagonal Izquierda arriba... raro no? Alguna solución?
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 04, 2010, 05:45:39 PM
Si: no uses el espacio.
Los teclados tienen un problema con las diagonales y los botones ctrl, alt, espacio y alguna especial más.
Por eso se recomienda que, de usar los cursores, se usen tres letras para el resto del control (podrías usar Q y E para rotar y W para disparar).

Yo he jugado al emu de SNES configurando TRES MANDOS COMPLETOS en el teclado para jugar a la vez (usando teclado numérico por un lado, supr y las otras cinco por otro lado y WASD para el tercero). Eso sí, no podíamos pulsar el botón de correr o atacar en movimiento para no fastidiar al resto :D :D :D

Por cierto, iba a decirlo pero era la hora de comer: no puedo probar el tema de partículas sin código fuente ;D Ahora que se ha publicado sí que puedo (tranquilo, Hokutoy, si no quieres no saldrá de mi PC y mi GP2X, salvo que me pirateen ;))
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on March 04, 2010, 06:15:09 PM
nen, to el ordenador entero te van a piratear? qué le van a meter un exploit para meter software casero o te lo van a copiar para venderlo más barato? :D
o te refieres a hackear :D.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on March 04, 2010, 08:13:15 PM
Yo he tenido esos problemas en mi juego Art Shot hace años cuando lo saque para PC. Ajenos al entorno de programación...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 04, 2010, 08:15:31 PM
bennu no tiene limites... ahora...

y si pulsas solo izq y arriba, sin pulsar disparo y rotar... que pasa?

puede ser un error del juego... puede ser que justo esa combinacion no va con tu modelo de teclado o con ninguno... hay combinaciones de teclas que no todos los teclado soportan... pero no se cual es el caso...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 04, 2010, 08:34:08 PM
Bueno misterio solucionado. En el Pc de casa tambien había una combinacion de teclas mas diagonalews que no funcionaba por lo que, como ha comentado Drumpi, he substituido el espacio por otra tecla común y ahora funciona de maravilla.

Cada día se aprende algo nuevo.

Saludos!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on March 05, 2010, 02:45:03 AM
Si te compras un teclado logytec caro no tienes problemas.
Es culpa de los teclados baratos que la circuitería por ahorrar es mala y no tiene una buena matriz y buffer de teclas pulsadas.
Yo me compré uno de los chinos (los todo a veinteduros nuevos) por probar y era buenísimo, no podías pulsar dos teclas de la misma línea, ni horizontal ni vertical, porque solo reconocía una de ellas, qué tendrá por dentro, si lo encuentro por casa de mis padres lo abro pa verlo :D.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 05, 2010, 04:26:10 AM
Quote from: DCelso on March 04, 2010, 06:15:09 PM
nen, to el ordenador entero te van a piratear? qué le van a meter un exploit para meter software casero o te lo van a copiar para venderlo más barato? :D
o te refieres a hackear :D.

Depende de si al gamberro que se mete en ordenadores ajenos lo llamas pirata o hacker. Puede que este último suene mas cool, pero en el diccionario español de la lengua, hasta donde yo se, se les llaman piratas informáticos :D :D :D
Además, si viene cuando Drumpi está en el PC no habría ningún problema, es el mejor antivirus y anti-intrusiones del mundo... lo que pasa es que nunca sé dónde anda, se va por ahí por los interneses y sólo sé donde ha estado porque alguien se queja de que su ordenador no funciona, o que por arte de magia se soluciona/estropea :D :D :D
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 05, 2010, 03:19:39 PM
Yo sigo con mis preguntas que pa eso soy un noob  ;D
Ahora mismo tengo un poco de lío en la cabeza con el tema de las colisiones y como mejorar el rendimiento ya que no quiero tener problemas en el futuro por falta de potencia debido a la mala programacion.
Situemonos:
Tengo en proceso NAVE
Tengo el proceso  BALA_NAVE
Tengo el proceso  ENEMIGO_REDONDO
Tengo el proceso  ENEMIGO_CUADRADO
Tengo el proceso  FINAL_BOSS

Hasta ahora lo he hecho de la sigüiente manera:

La NAVE dispara BALA_NAVE.

EL ENEMIGO_REDONDO, el ENEMIGO_CUADRADO y el FINAL_BOSS disparan BALA_ENEMIGO.

Los 2 tipos de BALA no chequean ninguna colision ya que hay muchas en pantalla y eso imagino que ralentizaría el asunto... mejor que chequeen las collisiones los protas/enemigos.

La NAVE chequea en cada loop si choca con una BALA_ENEMIGO o con el proceso  ENEMIGO_REDONDO con:
If ( TIPO_DE_DISPARO = Collision (type BALA_ENEMIGO)) ...
If ( QUIEN_CHOCA   = Collision (type ENEMIGO_REDONDO)) ...

Lo primero que me interesa saber es... ahora mismo la nave no detecta las colisiones ni con el ENEMIGO_CUADRADO ni con el FINAL_BOSS ni con otro supuesto tipo de disparo enemigo... hay alguna manera de lograr esto si tener que usar:

If ( TIPO_DE_DISPARO = Collision (type BALA_ENEMIGO)) ...
If ( QUIEN_CHOCA   = Collision (type ENEMIGO_REDONDO)) ...
If ( QUIEN_CHOCA   = Collision (type ENEMIGO_CUADRADO)) ...
If ( QUIEN_CHOCA   = Collision (type FINAL_BOSS)) ...

Hay alguna manera de conseguir el ID del proceso con el que se colisiona, sea cual sea el type de ese proceso (ya sea una bala, un enemigo, una pared, un rayo laser o un meteorito) en una sola linea o barrido sin que tener que chequear en cada LOOP si se colisiona con cada uno de ellos por separado?

Juer es que tiene que haber algo pero no me sale...

Ahora tengo codificado dentro del proceso ENEMIGO_REDONDO las propiedades del ENEMIGO_CUADRADO y del FINAL_BOSS modificando internamente el proceso mediante switchs y condiciones para que se comporte como uno u otro... pero a la larga esto sera un caos de proceso.

Saludos!

No se si me he explicado bien...


Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 05, 2010, 06:43:58 PM
Hombre, puedes crear una lista con todos los procesos activos, en tu caso, naves. Un array que guarde las ID de los procesos y usar collision con esos ID directamente, porque si no, más rápido que collision tienes el típico:
if (abs(x-enemigo.x) < 5 AND abs(y-enemigo.y) < 5))
O el uso de GET_DIST.

Por cierto: el juego funciona PERFECTAMENTE en GP2X sin overclock ni cosas raras. En el tercer o cuarto nivel me pareció que se resentía un poco, pero lo mismo era imaginación mía porque al disparar la nave se mueve más despacio ^^U
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 06, 2010, 08:23:11 AM
Quote from: Drumpi on March 05, 2010, 06:43:58 PM
Hombre, puedes crear una lista con todos los procesos activos, en tu caso, naves. Un array que guarde las ID de los procesos y usar collision con esos ID directamente, porque si no, más rápido que collision tienes el típico:
if (abs(x-enemigo.x) < 5 AND abs(y-enemigo.y) < 5))
O el uso de GET_DIST.

Por cierto: el juego funciona PERFECTAMENTE en GP2X sin overclock ni cosas raras. En el tercer o cuarto nivel me pareció que se resentía un poco, pero lo mismo era imaginación mía porque al disparar la nave se mueve más despacio ^^U

Gracias por las ideas pero la verdad es que como haré naves con formas raras y balas en forma de laser, etc... creo que NECESITO usar Collision para detectar las colisiones al pixel... porque por aproximación puede acabar haciendo cosas raras.
Creo que al final metere a todos los enemigos dentro de un solo proceso Enemigo) solo que dependiendo de los parametros de invocacion acabarà siendo/comportandose un enemigo u otro. Serà un lío de proceso pero así me aseguro que con solo dos chequeos enemigos/balas (quiza paredes tambien) ya voy servido.

Alguien mas quiere comentar ideas?
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Mr Matsusaka on March 08, 2010, 01:24:45 AM
Yo estoy con Drumpi, deberias probar esa colision.
De hecho los juegos de Cave suelen estar hechos con una colision por coordenadas bastante reducida, y eso aumenta bastante la jugabilidad.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 08, 2010, 05:57:04 AM
Quote from: Mr Matsusaka on March 08, 2010, 01:24:45 AM
Yo estoy con Drumpi, deberias probar esa colision.
De hecho los juegos de Cave suelen estar hechos con una colision por coordenadas bastante reducida, y eso aumenta bastante la jugabilidad.

Y como lo haría si tengo, por ejemplo, un enemigo en forma de T usando rotacion (angle=45000) que ha de comprobar la colision con una bala en forma de barra (rayo laser) que tambien esta medio rotada?

Asias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Windgate on March 08, 2010, 06:44:18 AM
Para eso último que dices mejor usa collision xD

Si te preocupa extremadamente la eficiencia puedes tener 2 procesos aproximadamente cuadrados para esa barra del rayo laser... Y 4 procesos para el enemigo en forma de T, sería una forma de evitar el consumo de CPU de collision ( )

No descartaría que juegos antiguos utilizasen esa técnica de "procesos tileados".
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 08, 2010, 12:07:43 PM
Hombre, si tiene forma de T, puede hacerlo por proximidad tambien, sólo que en lugar de tomar un cuadrado, tomarías dos rectángulos, pero claro, esto no va muy bien si empezamos a meter rotaciones y eso.

Aunque si el rayo es alargado puedes comprobar la proximidad de los puntos de los extremos. Los puntos de control serían buenos aliados en esto, sobre todo con get_real_point. O si no, como puedes obtener sus coordenadas y su ángulo, con un poco de trigonometría básica sale.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2010, 03:24:18 PM
Bueno... una nueva pregunta! Esta vez sobre "trayectorias" y formulas matematicas.

Lo que tengo:

Un Background 320×240 que simula un agujero negro
(http://www.elboomeran.com/upload/fotos/blogs_entradas/agujero_negro_med.jpg)

Lo que quiero:
Quiero simular un efecto de absorcion hacia el centro de la imagen... Dado un pequeño sprite situado en cualquier punto del borde de la pantalla, quiero que este siga una trayectoria circular/eliptica en que cada vuelta se reduzca el diametro y se acerque cada vez mas hasta meterse dentro del "agujero". El tipico efecto de "tirar de la cadena del WC".

La verdad es que soy de letras por lo que el tema de senos/cosenos y demas formulas matemaicas no las domino... alguien puede intentar ayudarme a encontrar la formula correcta para trazar la trayectoria descrita?

Asias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on March 18, 2010, 03:50:46 PM
Prueba con este código, poniendo lo siguiente en cada sección :

PRIVATE

original_x;
original_y;
angulo;
radio_grande=50;
radio_peque=20;
seno;
coseno;
velocidad_angulo=16000;

BEGIN

original_x=x;
original_y=y;

LOOP

   seno=sin(angulo)*radio_peque;
   coseno=cos(angulo)*radio_grande;
   x=original_x+coseno;
   y=original_y+seno;
   IF (flags==0) angulo=angulo-velocidad_angulo; ELSE angulo=angulo+velocidad_angulo; END

--

Para cambiar la longitud del giro cambia radio_grande, para la amplitud radio_peque, velocidad_angulo para la velocidad de la rotación, este ejemplo se basa en una posición permanente tienes que actualizar original_x y original_y si vas a usar scroll, con la diferencia de distancia equivalente con la posicion original.

---

Yo lo que quiero es exactamente lo contrario, conseguir ese agujero negro como efecto gráfico en tiempo real, efectos de abstracción, expansión para meter en explosiones etc (ya tengo unos de deformación " S " y " 7 " por código), a ver si saco algo de tiempo para trastear  :P o si alguien ya tiene un código para compartir  ;D
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2010, 04:04:31 PM
Quote from: BoMbErLiNk on March 18, 2010, 03:50:46 PM
Prueba con este código, poniendo lo siguiente en cada sección :

PRIVATE

original_x;
original_y;
angulo;
radio_grande=50;
radio_peque=20;
seno;
coseno;
velocidad_angulo=16000;

BEGIN

original_x=x;
original_y=y;

LOOP

   seno=sin(angulo)*radio_peque;
   coseno=cos(angulo)*radio_grande;
   x=original_x+coseno;
   y=original_y+seno;
   IF (flags==0) angulo=angulo-velocidad_angulo; ELSE angulo=angulo+velocidad_angulo; END

--

Para cambiar la longitud del giro cambia radio_grande, para la amplitud radio_peque, velocidad_angulo para la velocidad de la rotación, este ejemplo se basa en una posición permanente tienes que actualizar original_x y original_y si vas a usar scroll, con la diferencia de distancia equivalente con la posicion original.

---

Yo lo que quiero es exactamente lo contrario, conseguir ese agujero negro como efecto gráfico en tiempo real, efectos de abstracción, expansión para meter en explosiones etc (ya tengo unos de deformación " S " y " 7 " por código), a ver si saco algo de tiempo para trastear  :P o si alguien ya tiene un código para compartir  ;D

Genial bomber! Al llegar a casa lo pruebo. Lo que no acabo de entender es lo de los Flags... imagino que has obviado la línea donde se cambia de flags=0 a flags=1... que se cambia dependiendo de en que lado de la pantalla se esté?

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on March 18, 2010, 04:09:28 PM
Ah si, eso cambialo como quieras,  lo deje en caso de que quieras hacer el giro para la izquierda o para la derecha con solo cambiar el flags, también te sive cambiando la velocidad_angulo de positivo a negativo  ;)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 24, 2010, 10:18:56 PM
Quote from: BoMbErLiNk on March 18, 2010, 04:09:28 PM
Ah si, eso cambialo como quieras,  lo deje en caso de que quieras hacer el giro para la izquierda o para la derecha con solo cambiar el flags, también te sive cambiando la velocidad_angulo de positivo a negativo  ;)

Gracias Bomber. El código me ha ido de perlas para lograr el efecto que buscaba!
Para que veas como ha quedado el efecto dejo un cutre-video... pero en la consola luce 1000 veces mejor jejeje.

Saludos!

http://www.youtube.com/watch?v=dat_waZZe9E (http://www.youtube.com/watch?v=dat_waZZe9E)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: DCelso on March 24, 2010, 10:26:26 PM
juas, pues de cutre  no tiene nada eh, parece un juegazo.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on March 24, 2010, 10:54:24 PM
Muy chulo, me gusta el zoom que hace la nave al meterse en el agujero  :)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 24, 2010, 11:49:16 PM
muy bueno el video.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 25, 2010, 01:11:19 PM
Juer, mola el efecto ¿Y dices que es cutre? pero si seguro que hay cientos de programadores que ya no hacen ni eso (se lo mandan al motor de partículas y se olvidan).
Son esos detalles los que distinguen un simple juego de un buen juego.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 25, 2010, 04:04:30 PM
Gracias por los comentarios!
Técnicamente, lo que dije que era cutre era el video (por estar grabado con un programa screen-capturer de escritorio de esos) no el efecto ni el juego  ;D

Ya iré pidiendo mas ayuda a lo largo del desarrollo.

Lo malo es que al usar triple scroll en el fondo (1 scroll + background) + 1 scroll adicional y que cada bala es un proceso distinto, el juego, en la wiz a 750 Hz, me ha pasado de los 60 frames por segundo estables a unos 60-50 semiestables. El juego es igualmente jugable (no se nota mucho la diferencia... pero espera a que le meta mas efectos  :().

Saludos!

Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 25, 2010, 05:15:37 PM
No se yo, no creo que los scrolls consuman tanto, porque en el cutre port del último crap-juego que hice, scrolls de dos planos y un modo 7 iban perfectos en GP2X... siempre y cuando fuera a su resolución (a 800x600 es un desastre ^^U).

De todas formas, me interesa saber cual es el rendimiento de los scrolls en WIZ, porque quería meterle un par de ellos con efecto aditivo a mi último proyecto.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on March 25, 2010, 05:17:07 PM
Si los haces manuales y no utilizas los del sistema, vas a ganar rendimiento.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 25, 2010, 05:18:57 PM
Que raro, tenía entendido que AHORA era al revés. Con Fenix si era así, pero en mi último test había mejorado mucho el scroll ???

NOTA: dicho test tiene ya MUCHOS meses (posíblemente más de un año).
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 25, 2010, 05:38:27 PM
Quote from: FreeYourMind on March 25, 2010, 05:17:07 PM
Si los haces manuales y no utilizas los del sistema, vas a ganar rendimiento.

Como se hacen scrolls manuales? Cada capa es un proceso con un graph gigante (320×240) y mueves sus x e y?
Y para que al llegar al final salga otra vez el principio? Uso un scroll infinito/continuo multidirecional.

Imagino que el triple scroll no es el problema... es la gota que colma el vaso. De hecho la caída de rendimiento se nota cuando la nave dispara... pero es que cada bala es independiente y se crean/destruyen muchos procesos bala de forma continuada y aunque estos no chequean nada los enemigos si que chequean la colision con ellas.

Saludos!

Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on March 25, 2010, 07:33:30 PM
El tema de los fps en Wiz es complicado, la SDL tiene un problemilla de precisión.

Si pones 60,2, te va a hacer un frameskip de 2 siempre.
Si pones 60,1 te va a hacer un frameskip de 1 siempre.
Tienes que dejarlo en 60,0 y para que se mantenga "estable" tiene que conseguir llegar por lo menos a los 120 fps en un set fps 0,0.

Digamos que tu juego va con set fps 0,0 a 90 fps, el juego con set fps 60,0 te va a ir a 55fps (aunque el rendimiento llegue de sobras para ponerlo a 60), ahora baja a 70 fps, el juego se te va a poner a 45fps y así ..
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 25, 2010, 09:23:15 PM
Quote from: BoMbErLiNk on March 25, 2010, 07:33:30 PM
El tema de los fps en Wiz es complicado, la SDL tiene un problemilla de precisión.

Si pones 60,2, te va a hacer un frameskip de 2 siempre.
Si pones 60,1 te va a hacer un frameskip de 1 siempre.
Tienes que dejarlo en 60,0 y para que se mantenga "estable" tiene que conseguir llegar por lo menos a los 120 fps en un set fps 0,0.

Digamos que tu juego va con set fps 0,0 a 90 fps, el juego con set fps 60,0 te va a ir a 55fps (aunque el rendimiento llegue de sobras para ponerlo a 60), ahora baja a 70 fps, el juego se te va a poner a 45fps y así ..

Juer pues vaya mojon... eso explica muchas cosas.
Y no hay manera de arreglarlo?
Entonces al crear un juego que piensas que ira "cargadito" es mejor setearlo a un framerate de 50 o 30 pa asegurarte una estabilidad u que?

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on March 25, 2010, 09:32:15 PM
Nadie mejor que Bomber para explicarte lo de los scrolls, que los lleva implementando toda su vida :)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on March 25, 2010, 10:07:57 PM
Splinter me comento que se podría hacer de otra forma lo de los ticks, habra que esperar nuevas versiones de Bennu  :) Yo por lo pronto sigo trabajando a 60,0 hasta que se arregle el problema.

Cada bala que disparas genera un sonido ? A mi me pasaba exactamente eso, caia el rendimiento al usar la ametralladora y luego era porque se ahogaba reproduciendo los canales de sonido acumulados.. (no los lanzaba todos por el mismo canal) :P

El scroll va a ser siempre así con fondo negro ? Yo creo que para el de atras de todo si que te vendría mejor procesos, para las pocas estrellas que veo incluso sería mejor pintando el punto directamente que haciendo una especie de scroll manual con 4 imagenes
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 25, 2010, 10:26:34 PM
hay que ver si es posible, no afirme nada...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Windgate on March 27, 2010, 03:25:42 AM
El sonido es todo un mundo... Si tienes un proceso que lanza un sonido de una bala por FRAME y vas a 60 fps estás sacando 60 sonidos por segundo... Si cada sonido dura más de un segundo llegas a tener cientos de sonidos activos al mismo tiempo...

Lo he mirado alguna vez pero nunca he profundizado demasiado en el IMPORTANTE tema del sonido. En su día eché de menos una forma sencilla de reservar canales... Es posible hacerlo, pero supone bastantes lineas de código, se hace necesario tener un módulo de código separado para gestionar todo el tema del sonido.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 27, 2010, 06:08:25 AM
Bueno el juego aún no tiene sonido alguno... de ahí mi preocupación jejeje
Es una lastima lo del frameskip ojalà se pueda solucionar algún día.

Saludos!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on March 28, 2010, 12:35:50 AM
Yo no he tenido todavía que lidiar con SFX más allá del último concurso, pero si que he notado las limitaciones en Fenix con FrikiMusic: 8 wavs a la vez, no más... al menos en GP2X. Se podían hacer acordes de 4 notas con la guitarra, y repetirlo, pero no se podía tocar ninguna nota más hasta que se hubiera extinguido al menos una de las anteriores.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on April 02, 2010, 07:49:41 PM
Sigamos con las dudas... esta vez dudas con los sonidos (sfx) ya que hablais de ellos jejeje
Me he leído el wiki y entiendo que hay 16 canales para sfx y todo eso pero tengo el siguiente problema:

* Cuando una bala impacta a un enemigo esta hace un ruido de impacto play_wav(SFX_IMPACTO,0);
* Cuando el enemigo muere se oye una explosion play_wav(SFX_EXPLOSION,0);

El tema es que como generalmente los 16 canales para sfx estan ocupados reproduciendo los impactos de balas (que hay muchos y continuos) hay algunas veces (noticiable) que el sonido de la Explosion no se oye (no se reproduce).

Hay alguna manera (os juro que lo he intentado) para reservar por ejemplo, 8 canales de audio para los impactos y reservar 2 canales de audio solo para las explosiones... para asegurarse de que siempre suene la explosion.

Alguien me puede dejar algo de codigo de como sería ese gestor de canales?


Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on April 02, 2010, 08:22:16 PM
Para lo que comentas hay :
play_wav(sonido,repeticion,canal);

Si lanzas todos los disparos por el canal 0 ya esta el problema resuelto.

Si quieres que el sonido se gestione automaticamente no añadas el tercer parametro, o pon -1.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on April 03, 2010, 05:09:12 PM
Si, pero creo que antes hay que hacer un reserve_channels ¿no?
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on April 03, 2010, 05:28:06 PM
Bueno eso depende de los canales que vayas a usar manualmente, en Fenix eran 8 canales por defecto, del 0 al 7 si vas a usar uno de ellos no es necesario, en Bennu nose, pero yo siempre reservo 24 canales que son los que uso.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on April 08, 2010, 10:51:28 PM
Juer ahora el juego me peta en wiz y no veo el porque... algún cambio que habré hecho.
Lo he preguntado ya varias veces pero nunca me acuerdo...

Uso el siguiente *.gpe para cargar el juego:

#!/bin/sh

./pollux_set 'lcd_timings=397,1,37,277,341,0,17,337;dpc_clkdiv0=9;cpuclk=750;ram_timings=2,9,4,1,1,1,1';
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime

echo 2 > /proc/cpu/alignment

for prg in *.prg; do
    name=`basename $prg .prg`
    bgdc $prg
    bgdi $name
done

cd /usr/gp2x
exec /usr/gp2x/gp2xmenu


Alguien me añade lo que hace falta para que se generen los archivos sterr.txt y stdout.txt en la wiz y ver porque peta? Gracias!

No me digais el cacho de linea que tengo que poner... integrarlo en mi *.gpe para que funcione.

Muchas gracias!

Palabrita que es la ultima vez que lo pregunto... XD
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: BoMbErLiNk on April 09, 2010, 12:19:44 AM
Tenias mal la cabecera, he visto 2 veces #!/bin/sh, si estas usando el último firmware no necesitas pasarle los timings lcd en el pollux_set porque a mi me han parecido peores que los que ahora trae por defecto, aunque eso puedes ponerlo como veas  :), he añadido sync en el final del código porque se aconseja también ponerlo.

Quote
#!/bin/sh
./pollux_set 'cpuclk=750;ram_timings=2,9,4,1,1,1,1'
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime

echo 2 > /proc/cpu/alignment

for prg in *.prg; do
   name=`basename $prg .prg`
   bgdc $prg
   bgdi $name
done

sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu

A ver si te funciona así  :)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on April 09, 2010, 06:29:02 AM
Genial Bomber Como siempre!.
Karma up!
2 apuntes:
No me has puesto nada para que se genere el stdout.txt y el stderr.txt no?
Siempre que edito con el notepad de windows los gpe me da problemas... que programas usais vosotros?

Gracias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on April 09, 2010, 08:12:04 AM
Notepad++
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on April 10, 2010, 05:43:39 PM
Quote
#!/bin/sh
./pollux_set 'cpuclk=750;ram_timings=2,9,4,1,1,1,1'
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime

echo 2 > /proc/cpu/alignment

for prg in *.prg; do
    name=`basename $prg .prg`
    bgdc $prg 1>stdout1.txt 2>stderror1.txt
    bgdi $name 1>stdout2.txt 2>stderror2.txt
done

sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu

Modifico el GPE de Bomber para añadir la salida de datos a ficheros STDOUT y STDERROR en formato txt, para que lo puedas ver en el lector de ebooks. La gracia es que tanto BGDC como BGDI generan estos ficheros, por lo que tendrás uno de cada ejecutable.
De paso, decirte que WIZ y GP2X son máquinas basadas en Linux, y como se ha dicho varias veces, tiene una forma distinta de tratar los finales de linea, por lo que el programa para crear GPE necesita la sintaxis Linux.
Puedes usar cualquier editor típico de Linux, o como comentan, notepad++, pero recuerda cambiar el formato a estilo UNIX.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on April 10, 2010, 11:58:04 PM
Gracias Drumpi!
Karma up!!!

He usado el notepad++ y perfecto.
Ya he visto mi error.

Saludos!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on November 03, 2010, 10:53:26 AM
Bueno tengo alguna duda mas y aprovecho este hilo para ir preguntando:
Alguien bueno con las mates y las formulas...
Pongamos que el proceso CARTA tiene que desplazarse desde su lugar de ORIGEN (punto al azar de la izquierda de la pantalla) hasta un lugar al azar situado a la derecha de la pantalla (DESTINO).

El proceso carta, mientras se desplaza, hace variar su ANGLE para conseguir un efecto de rotacion 360º mientras se desplaza hacia su DESTINO (como si fuera una hélice).

La pregunta es la siguiente... se puede medir/calcular de alguna manera la distancia entre los dos puntos y ajustar la velocidad de desplazamiento y/o angulos de giro en cada frame para que tanto al salir de ORIGEN como al llegar a DESTINO el angulo de la carta sea el orginal/nomal/angle=0???

¿Como?

Asias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on November 03, 2010, 11:01:01 AM
Te entiendo, lo que quieres es cambiar la velocidad de rotacion, para que al parar en el destino la carta cuadre con la rotacion inicial, o al reves, que sea la velocidad de llegada que cambie y la velocidad de rotacion se mantenga ?

Yo lo haria a ojo, y iria ajustando la velocidad de rotacion, y al final le ponia el angulo igual al principio, y con esto en 3, 4 pruebas ya tendria el efecto que quiero, aunque no sea matematicamente perfecto, lo importante es que no se note el ajuste al final, o que quede lo mas cercano posible a la rotación que tenia al principio antes de igualarsela.
De todos modos esta es la forma chapuzera, pero funciona, depende tambien del valor del fps que uses, para que se note mas o menos :)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on November 03, 2010, 11:40:18 AM
Quote from: FreeYourMind on November 03, 2010, 11:01:01 AM
Te entiendo, lo que quieres es cambiar la velocidad de rotacion, para que al parar en el destino la carta cuadre con la rotacion inicial, o al reves, que sea la velocidad de llegada que cambie y la velocidad de rotacion se mantenga ?

Yo lo haria a ojo, y iria ajustando la velocidad de rotacion, y al final le ponia el angulo igual al principio, y con esto en 3, 4 pruebas ya tendria el efecto que quiero, aunque no sea matematicamente perfecto, lo importante es que no se note el ajuste al final, o que quede lo mas cercano posible a la rotación que tenia al principio antes de igualarsela.
De todos modos esta es la forma chapuzera, pero funciona, depende tambien del valor del fps que uses, para que se note mas o menos :)

Eso es lo que quiero hacer... el juego va a 320×240 a 60 fps.
El problema de hacerlo a "ojo" es  que como indico anteriormente tanto el origen COMO el DESTINO son variables/azar por lo que a ojo no siempre valdría para todos los casos.

En plan cutre, como rota a buena velocidad, tampoco se aprecia mucho el "salto" cuando llega al sitio pero era por hacerlo bien y así aprender algo nuevo XD
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Mr Matsusaka on November 03, 2010, 02:16:46 PM
Depende de varios factores. Lo primero es, quieres que haya deceleracion en el movimiento? Si asi es la cosa se complica bastante.

Si por contra el desplazamiento es constante y no hay acceleracion la cosa es bastante mas sencilla. Cojes la distancia de X y la divides por la velocidad de la carta.
num_frames = dist_x / inc_x;

Con esto ya sabemos los frames que va a dura el movimiento. Luego hacemos
vel_giro = (36000*num_de_giros_que_queramosXD)/num_frames;

EDIT: Lo raro es que me hayas entendido con lo mal que estaba redactado el mensaje xd
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on November 03, 2010, 02:46:20 PM
Asias Man!
Velocidad constante... luego al llegar a casa lo pruebo y te digo el que.

Karma up!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on November 03, 2010, 05:20:21 PM
Mr. soy fan de ti :)
Karma tambien.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on January 14, 2011, 11:42:45 AM
Mas preguntas de un ignorante...
Esto no esta directamente relacionado con Bennu sino con la programacion en general pero...
Jugando a uno de los últimos juegos homebrew de Caanoo JUMP TO THE MOON
http://lostsite.altervista.org/wiz/?p=2873
y viendo el sistema de ranking de puntuaciones que utiliza (Obtienes un score de 1987777 puntos y te dan un password o "codigo cifrado"  para validar esta puntuacion es una pagina web.

Mi pregunta es... si tienes que tu score=9580 puntos como generas el password cifrado para poder validar esa puntuacion sin que sea tan obvio que cualquiera se lo hackee... hay librerias de cifrado ya hechas? Hay algo parecido en Bennu? Alguna otra sugerencia para llevar una tabla de scores online/web y comprobar que los scrores de la gente son verdaderos?

Asias!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on January 14, 2011, 12:29:03 PM
con el modulo de encrypcion de bennugd quizas
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Drumpi on January 14, 2011, 06:09:52 PM
Existen algoritmos de cifrado que puedes hacer tú mismo en código Bennu, y añadir un programa de verificación en el servidor para controlar partidas trucadas (como conseguir puntuaciones enormes en el primer nivel, por ejemplo).
Pero la solución de Splinter es la más rápida y sencilla, ya que son librerías de encriptado de uso habitual (van integradas en Linux, así que deben ser buenas).
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 16, 2011, 03:07:12 PM
Nueva duda para los experts...
Tengo de fondo 320×240  que corresponde a una foto cualquiera en plan wall paper... por ejemplo un bosque.
Tengo un proceso cuyo graph es un figura toda de color blanco que equivale a un "Donut" o rosquilla.
Lo que quiero hacer es que la "textura" blanca del Donut mute a la textura de la foto del fondo que tiene justo atras (un efecto como si se mimetizara... copiando la textura del fondo de la zona donde se encuentra).
Una vez tengo al donut texturizado me gustaria poder cambian su angle, size, tec... sin que la textura del fondo se modificara en absoluto.

Siento si no me he explicado.

Saludos!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on March 16, 2011, 03:33:58 PM
Con map_block_copy talvez, creo que modificando el ejemplo de Splinter o de la lupa de Bomber podrias hacer lo que deseas.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2011, 08:57:08 AM
Bueno al final lo he solucionado con un map_block_copy y el resultado es bastante bueno... lo que pasa es que para que el donut adquiera la textura deseada tengo que usar un flags 32 (blending aditivo). El resultado es bastante bueno si hago el donut completamente blanco pero aun asi se nota un poco el cambio de "brillo" al fusionarse la textura con el donut blanco... aunque el resultado es bastante bueno para lo que quiero hacer.

Ahora mi segunda pregunta... llevo varios intentos y no se me ocurre como hacerlo....
Imagina que el mouse fuera una mano (en plan mando de wii XDDDDD). Quiero que al pulsar mouse.left la mano agarrara al DONUT y que este variara su angle a + o menos velocidad dependiendo de como de rapido mueves el mouse (o deslizes el dedo)... no se si me explico.

Es para una conversion de un juego para mobil que le ha gustado a mi parienta.
A ver si con la foto me explico mejor.

http://a5.mzstatic.com/us/r1000/033/Purple/5c/9d/ea/mzl.zozoipyp.480x480-75.jpg
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on March 18, 2011, 09:10:33 AM
Que juego es ?
Pues el angulo seria una rotación segun la direccion del desplazamiento del mouse con la velocidad del mismo.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2011, 09:20:14 AM
Y eso como se traduce a codigo? Las formulas matematicas nunca han sido mi fuerte...
Como se determina la velocidad del mouse?

El juego se llama Puzzle Wheel y la mujer lo juega en su Nokia c7 aunque me suena que esta tambien para iphone/android/ipad.

Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: FreeYourMind on March 18, 2011, 09:41:15 AM
He visto que esta para Android, pues a ver si viene algun matematico que te ayude que yo tambien estuve muchos años para aprovar en matematica xDDDD

No hiciste un calculo de distancia cuando hiciste lo de girar las cartas ?
Pues aqui seria lo mismo, calcularias la distancia/tiempo desde que tienes el boton presionado hasta que lo sueltas para determinar la velocidad :)
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2011, 12:16:40 PM
Quote from: FreeYourMind on March 18, 2011, 09:41:15 AM
He visto que esta para Android, pues a ver si viene algun matematico que te ayude que yo tambien estuve muchos años para aprovar en matematica xDDDD

No hiciste un calculo de distancia cuando hiciste lo de girar las cartas ?
Pues aqui seria lo mismo, calcularias la distancia/tiempo desde que tienes el boton presionado hasta que lo sueltas para determinar la velocidad :)

Bueno la idea no es pulsar, lanzar y soltar como si fuera la rueda de la fortuna... mas bien que al pulsar encima del donut/disco y desplazar el dedo/mouse esta gire (variar su angle) a mas o menos velocidad dependiendo de lo rapido que muevas tu el dedo.

Para lo de las cartas lo hce diferente... al final no me complique y cuando estaban cerca de destino se ponian bien automaticamente... como iva muy rapido apenas se nota si se habian pasado o quedado corto jejeje

Venga matematicos! DEjad la calculadora y hecharme una mano!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2011, 12:58:53 PM
Bueno he colgdo un video de lo que quiero hacer y no me sale (estoy aburrido).

http://www.youtube.com/watch?v=yq8wnwj-0mE

Primero , los aros se mueven a una velocidad fija porque los muevo con los cursores.
Despues se ve el mouse como intenta hacer que se muevan los aros sin conseguirlo.
Lo que quiero es poder moverlos.
XD
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2011, 06:16:17 PM
Pero que pasa en esta comunidad? Es que teneis vida o que? Tendriais que estar lurkeando los foros a cada minuto! GRRRRR!

Bueno ya he solucionado el problema... al final lo he arreglado asi...

Hay un proceso (CURSOR) que es la sombra del mouse (x=mouse.x; y=mouse.y)
Cuando se pulsa encima de un circulo este hace:
ANGLE=GET_ANGLE(ID_CURSOR);   
Por lo que a medida que mueves el mouse (a la velocidad que tu quieras) el circulo varia su angle.

No es perfecto aun pero me parece un buen camino.

Saludos!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 18, 2011, 06:20:05 PM
perdon por no responderte, me quedo el mensaje a medio escribir, pero te iba a sugerir exactamente eso, que cuando pulses en el grafico obtengas el angulo actual del grafico y con respecto al angulo del mouse obtengas el angulo real que deba ir tu grafico.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 18, 2011, 06:35:23 PM
aca te pongo un codigo de ejemplo, que acabo de hacer.


import "mod_map";
import "mod_video";
import "mod_mouse";
import "mod_draw";
import "mod_key";
import "mod_grproc";
import "mod_math";

private
    int clicked = 0;
    int angle0;
begin
    set_mode(640,480,32);

    mouse.graph=map_new(1,1,32);
    map_clear(0,mouse.graph,rgba(255,0,0,255));

    x=320;
    y=240;
    graph=map_new(100,100,32);

    drawing_map(0,graph);
    map_clear(0,graph,rgba(128,128,0,128));

    drawing_color(rgba(0,0,128,200));
    draw_fcircle(25,25,25);

    while(!key(_ESC))
        if (mouse.left and collision(type mouse))
            if ( !clicked )
                angle0 = angle - fget_angle(x,y,mouse.x,mouse.y);
                clicked = 1;
            end
            angle = angle0 + fget_angle(x,y,mouse.x,mouse.y);
        else
            clicked = 0;
        end
        frame;
    end

end

Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on March 18, 2011, 07:14:42 PM
Buenisimo Splinter! Karma up!

Voy a destripar tu codigo y a adaptarlo al mio. Thx!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on March 18, 2011, 07:26:30 PM
de nada!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Windgate on March 29, 2011, 03:29:16 AM
Se ve bonito el puzzle de los perritos, me recuerda a cuando se habló por aquí de hacer algunos minijuegos educativos, algunos en seguida nos metemos con Wii, 3D y movidas raras, pero me gusta en lo que suele meterse Hoku, es sencillo y se ve muy bien xD
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on December 30, 2011, 05:04:31 PM
Buenas! Me ha surgido una nueva duda cuando estaba añadiendo la opcion de pausa a un juego que tengo por ahí...
Mi pregunta es por si hay alguna manera sencilla de hacerlo.
Bien al pulsar una tecla, se hace una pausa en el juego ejecutando un simple:
SIGNAL(ALL_PROCESS, S_FREEZE);
Cuando se vuelve a pulsar la tecla se despierta a los procesos con:
SIGNAL(ALL_PROCESS, S_WAKEUP);

Todo perfecto menos por un tema... hay unos procesos llamados ENEMIGOS que, cuando son eliminados por el protagonista, se quedan en modo FREEZE mientras se generan efectos de sangre, etc... por lo que mientras juegas siempre hay procesos ENEMIGOS tanto FREEZEADOS como normales.

El problema viene que cuando hago pausa se FREEZEAN todos los procesos ENEMIGOS (los normales y los que ya estaban FREZZEADOS por estar muriendose) y al quitar la pausa se despiertan (WAKEUP) TODOS los procesos ENEMIGOS... incluso los que antes de la pausa estaban frezzeados.

Al volver de la pausa no hay ni un proceso ENEMIGO FREEZEADO por lo que se me generan errores.

Hay alguna manera de arreglarlo o hacer pausa sin tocar mucho codigo?
Asias!




Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: josebita on December 30, 2011, 05:45:51 PM
Se me ocurre que cuando un enemigo muere puedes crear otro proceso distinto (de otro tipo) que controle lo que ocurre cuando un enemigo muere.

Otra forma podría ser controlar la pausa mediante una variable global y meter la lógica de la pause dentro del LOOP de cada proceso que deba pausarse. Básicamente lo que debérías hacer es que el proceso se comporta normal salvo cuando la variable global sea cierta.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Fede on December 30, 2011, 06:52:27 PM
Si el enemigo muere pon que ignore el wakeup.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: KeoH on December 30, 2011, 08:21:11 PM
o complicate la vida en la funcion de pausa, y haz q compruebe si esta muerto (con una variable local) para descongelarlo o no xD
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: gecko on December 30, 2011, 10:09:32 PM
Splinter habia hecho una rutina para mandar señales a procesos, y almacenar/recuperar el estado previo a la señal, habria que buscar en el foro.
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on January 01, 2012, 07:43:18 PM
Bueno, gracias por las ideas chicos!
Al final he hecho una medio chapuza ya que para hacerlo bien tendria que haber tocado demasiado codigo para mi gusto.
Eso me ensañara a pensar desde el principio en cosas como la opcion de PAUSA.

Saludos!
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on January 03, 2012, 01:40:53 AM
si el proceso esta muerto no deberia recibir se#ales...
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: Hokutoy on January 03, 2012, 06:47:59 AM
Quote from: SplinterGU on January 03, 2012, 01:40:53 AM
si el proceso esta muerto no deberia recibir se#ales...

Ya, per en el contexto que describo, cuando uso la palabra "muerto" no me refiero a que el proceso este muerto (kill/killed) para BennuGD si no que lo ha matado el personaje en el juego debido a las balas, etc.. (muerte ficticia) y el proceso entra en FREEZE mientras los efectos especiales de su "muerte" se generan.

Saludos
Title: Re: Preguntas sobre programacion de Hokutoy.
Post by: SplinterGU on January 03, 2012, 07:49:34 AM
ah, sorry... vale...