Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Button pressed y button released a la vez [SOLUCIONADO]  (Leído 279 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Dublan

Hola makeros!

A ver si me podéis echar una mano con este problemilla...

Mi juego es un shooter lateral para móvil. El problema que tengo sucede al intentar agacharme y disparar a la vez, es decir, pulsando simultáneamente 2 veces la pantalla.

El personaje dispara pulsando la pantalla, y deja de disparar al dejar de pulsarla. Además, se agacha pulsando las flechas de movimiento. No tengo problema con el multitouch, pero sí tengo problema a la hora de que el juego me detecte que he dejado de pulsar la pantalla para disparar, pero sigo pulsandola para mantenerme agachado.

El código que tengo en el step event para disparar es:

Código: [Seleccionar]
//Con metralleta
    for( i=0; i<=1; i++ )
    {
        if( device_mouse_check_button( i, mb_left ) ) && ( device_mouse_x(i) > 500 ) && ( device_mouse_y(i) > 300 ) && ( device_mouse_y(i) < 1217 )
        {   

        if !instance_exists(obj_fondo_pausa) && global.balas>=1
        {
            if global.personaje=="merce" or global.personaje=="merce1" or global.personaje=="merce2" or global.personaje=="merce3" or global.personaje=="merce5" or global.personaje=="merce6"or global.personaje=="merce7"
            {
                if !view_enabled && !instance_exists(obj_cabeza_disp)
                {
                    if (visible=false) && y<obj_suelo.y
                    {
                    x=device_mouse_x(i)
                    y=device_mouse_y(i)

                    visible=true
                    global.disparo=1
                       
                        //Donde mira el player
                        if x>obj_player.x && !instance_exists(obj_cabeza_disp)
                        {
                        obj_player.image_xscale=1
                        if global.direccion="abajo" or global.direccion="izq-abajo" or global.direccion="abajo-dcha"{instance_create(obj_player.x,obj_player.y+15,obj_cabeza_disp);obj_player.image_speed=0.5}
                        else{instance_create(obj_player.x,obj_player.y,obj_cabeza_disp);obj_player.image_speed=0.5}

                        }
                        else
                        {
                        obj_player.image_xscale=-1
                        if global.direccion="abajo" or global.direccion="izq-abajo" or global.direccion="abajo-dcha"{instance_create(obj_player.x,obj_player.y+15,obj_cabeza_disp);obj_player.image_speed=0.5}
                        else{instance_create(obj_player.x,obj_player.y,obj_cabeza_disp);obj_player.image_speed=0.5}
                        }
                    }
                }
            }
        }
        }
    }

Código en step event para dejar de disparar:
Código: [Seleccionar]
        for( i=0; i<=1; i++ )
        {
            if( device_mouse_check_button_released( i, mb_left ) )&& ( device_mouse_x(i) > 500 ) &&( device_mouse_y(i) > 300 ) && ( device_mouse_y(i) < 1217 ) && visible=true
            {
            visible=false
            with(obj_cabeza_disp){instance_destroy()}
            }
        }

Código en step event del boton agacharse:
Código: [Seleccionar]
for( i=0; i<=1; i++ )
    {
    if( device_mouse_check_button( i, mb_left ) ) && ( device_mouse_x(i) > x1 and device_mouse_x(i) < x2 ) && ( device_mouse_y(i) > y1 and device_mouse_y(i) < y2 )
        {
        global.direccion="abajo"
        image_index=1     

        }
   
    }

Al correr el juego en PC funciona sin problema, pero en Android es cuando tengo problemas. Entiendo que se debe a que si mantengo la pantalla pulsada con un dedo para estar agachado y con otro para disparar, y solamente levanto el dedo de disparar, el móvil no detecta que he levantado ese dedo. Si fuera este el problema, ¿cómo podría solucionarlo?

PD: he probado a crear virtual key en la pantalla para disparar, pero no para el movimiento, y sigo teniendo el mismo problema. No sé si creando virtual keys para todo lo solucionaría.

Mil gracias!!!!
« última modificación: Abril 22, 2018, 11:13:50 pm por Dublan »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Dublan

Respuesta #1 en: Abril 21, 2018, 09:45:34 am
Acabo de probar metiendo virtual Keys al botón de dirección y al de disparo y nada  :'(

Algún alma caritativa que me ayude????

 


Desconectado Goganpis

Respuesta #2 en: Abril 21, 2018, 08:32:38 pm
Te ayudaria pero no tengo conocimientos del android pero no se si esto funcionaria de la misma forma...

Código: [Seleccionar]
// Event Create

key_fire = 0
key_firePressed = 0
key_firePrev = 0
key_fireRel = 0

Código: [Seleccionar]
// Event step

key_fire = mouse_check_button(mb_left) // La funcion determinada a efetuar
key_firePressed = (key_fire and !key_firePrev) // devuelve 1 si antes estaba presionado sino el 0
key_fireRel = (!key_fire and key_firePrev) // devuelve 1 si antes lo tenias presionado sino el 0
key_firePrev = key_fire // Es solo para que funcione

Asi trabajan las funciones del pressed & release en gm puedes aplicarla con tu propia key a usar. Espero que te halla ayudado.  :-[

 


Desconectado Clamud

Respuesta #3 en: Abril 22, 2018, 09:20:25 pm
Deberías revisar todos los puntos táctiles (de 0 a 4), tal vez el punto que está sobre la flecha tiene indice 3, pero el for solo llega a 1.

Usar "virtual keys" es buena opción, creo que haría el código más fácil de escribir.

 


Desconectado Dublan

Respuesta #4 en: Abril 22, 2018, 11:13:29 pm
Hola! Gracias por las respuestas!!!

Después de bastantes horas y quebraderos de cabeza he descubierto que fallaba...

Lo dejo por aquí por si alguien se topa con ello. En una línea de código perdida en un objeto tenía puesto

Código: [Seleccionar]
if  mouse_y>=obj_suelo.y and instance_exists(obj_cabeza_disp){visible=false;with(obj_cabeza_disp){instance_destroy()}}

Es decir, esta condición chequeaba para todos los mouse (todas las pulsaciones) su condición y, y dado que la tecla de movimiento siempre cumplía esta condición, me estaba alternando el código. En resumidas cuentas, si usáis los device_input, NUNCA uséis los mouse_x o mouse_y porque lo comprobará para absolutamente todas las pulsaciones.

Saludos!
« última modificación: Abril 22, 2018, 11:15:02 pm por Dublan »