Autor Tema: Ratón bloqueado al minimizar  (Leído 1569 veces)

Arcontus

  • Full Member
  • ***
  • Mensajes: 200
  • Karma: 6
Ratón bloqueado al minimizar
« en: Noviembre 17, 2013, 08:42:11 pm »
Resulta que si tengo a pantalla completa el juego, si se minimiza por cualquier causa el ratón queda como cogido a la esquina superior izquierda y no se puede operar con el.
¿Alguna idea de como solucionarlo?
Gracias!

Yawin

  • Hero Member
  • *****
  • Mensajes: 1088
  • Karma: 44
  • La primera persona que ha "demosceneado" en Bennu.
Re:Ratón bloqueado al minimizar
« Respuesta #1 en: Noviembre 18, 2013, 10:08:25 am »
Sí, a mi también me suele pasar. Aunque nunca se me había ocurrido preguntar si tenía arreglo. ¿Lo tiene?
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6228
  • Karma: 157
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Ratón bloqueado al minimizar
« Respuesta #2 en: Noviembre 18, 2013, 04:58:49 pm »
Es raro.
Cuando me suele pasar eso con cualquier juego o programa, pulsando ALT+TAB se me debería cambiar de nuevo al juego o al escritorio (en este segundo caso, una nueva pulsación me devuelve al juego). Aunque se me ha dado el caso de algún juego a pantalla completa que no consigue restaurarse y se debe cerrar con el gestor de tareas.
Se puede hacer sin usar el ratón. No sé cómo será en 7 y en 8, pero en w2k y anteriores (creo que es válido en XP), la combinación CTRL+ALT+SUPR (¿os suena?) os debe abrir una ventana con varias opciones, entre ellas, el gestor de tareas o apagar el equipo. Si sabeis moveros por las ventanas con los cursores, el tabulador, el espacio y el intro, no debería ser difícil.

De todas maneras, si estais debugeando, no dejeis de meter la mod_debug y compilar con -g. Alt+x debería funcionar para hacer un hard-close al juego.
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)

Yawin

  • Hero Member
  • *****
  • Mensajes: 1088
  • Karma: 44
  • La primera persona que ha "demosceneado" en Bennu.
Re:Ratón bloqueado al minimizar
« Respuesta #3 en: Noviembre 18, 2013, 05:12:09 pm »
el caso es que a mi por ejemplo, me apetece minimizar un juego para ajustar un parámetro del fichero de configuración y posteriormente refrescar ingame. Y el ratón se queda arriba. Aún haciendo alt+tab. Aun haciendo ctrl+alt+supr (que en win vista en adelante es más cómodo hacer ctrl+mayus+esc).
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

Arcontus

  • Full Member
  • ***
  • Mensajes: 200
  • Karma: 6
Re:Ratón bloqueado al minimizar
« Respuesta #4 en: Noviembre 18, 2013, 05:42:57 pm »
Lo de alt+tab funciona perfectamente, pero sin duda si no se conoce como le sucedió a un amigo que estaba probando mi proyecto, al final tuvo que reiniciar el pc y me dijo: "Solo por esto, ya no viciaría más a tu juego!" Sin duda la experiencia de usuario es importante y este "bug" es muy molesto.

JaViS

  • Global Moderator
  • *****
  • Mensajes: 1160
  • Karma: 19
    • Anarkade
Re:Ratón bloqueado al minimizar
« Respuesta #5 en: Noviembre 18, 2013, 06:56:30 pm »
yo lo soluciono asi:


Código: [Seleccionar]
if (!focus_status)

// en pc si sacamos el foco debemos restaurar la ventana para devolver el mouse al OS
if (full_screen)
restore_full_scren = true;
set_mode(map_info(0,0,G_WIDTH),map_info(0,0,G_HEIGHT),16);
end

//mientras no se recupere el foco
while(!focus_status)
frame;
end

if (restore_full_scren)
full_screen = true;
set_mode(map_info(0,0,G_WIDTH),map_info(0,0,G_HEIGHT),16);
end
end
Working on Anarkade. A couch multiplayer 2D shooter.

Arcontus

  • Full Member
  • ***
  • Mensajes: 200
  • Karma: 6
Re:Ratón bloqueado al minimizar
« Respuesta #6 en: Noviembre 18, 2013, 07:56:54 pm »
yo lo soluciono asi:


Código: [Seleccionar]
if (!focus_status)

// en pc si sacamos el foco debemos restaurar la ventana para devolver el mouse al OS
   if (full_screen)
      restore_full_scren = true;
      set_mode(map_info(0,0,G_WIDTH),map_info(0,0,G_HEIGHT),16);
   end
   
   //mientras no se recupere el foco
   while(!focus_status)
      frame;
   end
   
   if (restore_full_scren)
      full_screen = true;
      set_mode(map_info(0,0,G_WIDTH),map_info(0,0,G_HEIGHT),16);
   end
end
Me da un error, no reconoce "restore_full_scren"

JaViS

  • Global Moderator
  • *****
  • Mensajes: 1160
  • Karma: 19
    • Anarkade
Re:Ratón bloqueado al minimizar
« Respuesta #7 en: Noviembre 18, 2013, 11:36:59 pm »
pero no seas cabezon, es un ejemplo, tenes que declarar la variable y ponerlo dentro de un loop
Working on Anarkade. A couch multiplayer 2D shooter.

Arcontus

  • Full Member
  • ***
  • Mensajes: 200
  • Karma: 6
Re:Ratón bloqueado al minimizar
« Respuesta #8 en: Noviembre 20, 2013, 09:37:58 pm »
pero no seas cabezon, es un ejemplo, tenes que declarar la variable y ponerlo dentro de un loop
:O
Pues es verdad, no me di cuenta de alto tan simple... de todas maneras parece que sigue sucediendo lo mismo con el mouse. ¿Alguna idea?

Código: [Seleccionar]
PROCESS foco()
PRIVATE
    int restore_full_scren;
END
BEGIN
    LOOP
        if (!focus_status)
        // en pc si sacamos el foco debemos restaurar la ventana para devolver el mouse al OS
            if (full_screen)
                restore_full_scren = true;
                set_mode(map_info(0,0,G_WIDTH),map_info(0,0,G_HEIGHT),32);
            end

            //mientras no se recupere el foco
            while(!focus_status)
                frame;
            end

            if (restore_full_scren)
                full_screen = true;
                set_mode(map_info(0,0,G_WIDTH),map_info(0,0,G_HEIGHT),32);
            end
        end
        FRAME;
    END
END

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6228
  • Karma: 157
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Ratón bloqueado al minimizar
« Respuesta #9 en: Noviembre 30, 2013, 06:24:48 pm »
Hombre, obviamente, al usuario final, eso es un problema gordo, porque cualquier molestia, por pequeña que sea, cualquier cosa más allá del doble clic y jugar, le hace perder el poco interés que pudiera tener en el juego (partimos de la premisa de que hacemos juegos indies, que no son famosos, y que el que lo juega lo hace por curiosidad). Muy bueno tiene que ser como para que lo pase por alto.
Pero no sé si eso es problema de Bennu, del SO o de las propias SDL.
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)

Arcontus

  • Full Member
  • ***
  • Mensajes: 200
  • Karma: 6
Re:Ratón bloqueado al minimizar
« Respuesta #10 en: Diciembre 10, 2013, 11:32:55 pm »
Hombre, obviamente, al usuario final, eso es un problema gordo, porque cualquier molestia, por pequeña que sea, cualquier cosa más allá del doble clic y jugar, le hace perder el poco interés que pudiera tener en el juego (partimos de la premisa de que hacemos juegos indies, que no son famosos, y que el que lo juega lo hace por curiosidad). Muy bueno tiene que ser como para que lo pase por alto.
Pero no sé si eso es problema de Bennu, del SO o de las propias SDL.

Continuo con el problema... ¡ayuda! :'( :'(

Arcontus

  • Full Member
  • ***
  • Mensajes: 200
  • Karma: 6
Re:Ratón bloqueado al minimizar
« Respuesta #11 en: Diciembre 20, 2017, 09:01:43 am »
Solventé el problema hace tiempo, pero se me olvido postear mi solución:

Código: [Seleccionar]
PROCESS EstadoFocus()
PRIVATE
    estado;
END
BEGIN
    estado = 1;
    LOOP
        if ((focus_status) && (estado == 0))
             set_mode(Resolucion_x,Resolucion_y,Resolucion_modo, mode_fullscreen);
             estado = 1;
         else
             if (estado == 1)
                 if (!(focus_status))
                       set_mode(Resolucion_x,Resolucion_y,Resolucion_modo, mode_window);
                       estado = 0;
                END
            END
         END
         FRAME;
     END
END

Por si a alguien le sucede lo mismo, esta función que corre en segundo plano se encargará de no bloquear al mouse cambiando entre los modos ventana y pantalla completa de manera transparente.

Un saludo!

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6228
  • Karma: 157
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Ratón bloqueado al minimizar
« Respuesta #12 en: Diciembre 20, 2017, 11:45:58 pm »
Me alegra ver que al final has podido resolverlo :D
Hay que tomar nota para que no se olvide esto, porque puede ser importante para otros desarrollos. Muchas gracias por tu solución :)
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)