Preguntas sobre programacion de Hokutoy.

Started by Hokutoy, February 02, 2010, 04:44:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hokutoy

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

FreeYourMind

Que juego es ?
Pues el angulo seria una rotación segun la direccion del desplazamiento del mouse con la velocidad del mismo.

Hokutoy

#107
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.


FreeYourMind

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 :)

Hokutoy

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!

Hokutoy

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

Hokutoy

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!

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

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

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Hokutoy

Buenisimo Splinter! Karma up!

Voy a destripar tu codigo y a adaptarlo al mio. Thx!

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

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
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Hokutoy

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!





josebita

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.

Fede

Si el enemigo muere pon que ignore el wakeup.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.