Forzar actualización constante de la ventana WINE

1

Estoy tratando de ejecutar Imperialism 2 en Crossover (WINE), en modo de escritorio virtual. El juego casi funciona, excepto que la pantalla no se actualiza.

Lo que quiero decir con esto es que la ventana WINE es inicialmente negra. Si luego arrastro otra ventana encima y la alejo nuevamente, la ventana ahora muestra una imagen del juego en este punto. Si luego hago clic en las cosas dentro del juego, no sucede nada visualmente, hasta que vuelva a arrastrar otra ventana encima de la WINE.

Entonces, lo que parece estar sucediendo es que la ventana WINE no se da cuenta de que necesita seguir actualizando lo que muestra. Solo cuando su contenido se oscurece y luego se revela nuevamente, se da cuenta de que tiene que volver a dibujar. Esto es bastante frustrante: el juego funciona bien, los gráficos se dibujan correctamente, pero simplemente no se muestran.

¿Hay alguna manera de seguir enviando un "mensaje de redibujo" a una ventana para forzar que estos redibujos sucedan? Imp 2 es un juego por turnos, por lo que si los redibujos ocurrieran solo unas pocas veces por segundo, estaría bien.

Zarkonnen
fuente

Respuestas:

0

He encontrado una manera completamente horrenda pero viable de solucionar mi problema. Primero, descargue e instale Afloat , que le permite configurar ventanas como superposiciones translúcidas globales no cliqueables.

Luego, cree un archivo HTML cuyo fondo cambie entre blanco puro y blanco casi puro 20 veces por segundo. Algo como esto:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Strobe Light</title>
    <script language="javascript" type="text/javascript">
      <!--
      var c = 0;

      function strobe() {
        document.bgColor = c ? '#fefefe' : '#ffffff';
        c = (c + 1) % 2;
      }

      function startStrobe() {
        setInterval(strobe, 50);
      }
      -->
    </script>
  </head>
  <body onload="startStrobe();">
  </body>
</html>

Finalmente, abra este archivo en Safari, cambie el tamaño de la ventana para llenar la pantalla tanto como sea posible y use Afloat para configurar la ventana como una superposición global no transparente casi transparente. ¿El resultado? La pantalla completa (incluida la ventana WINE) se ve obligada a actualizarse cada 50 ms.

¿Es esto completamente horrible? Si. Pero funciona.

Zarkonnen
fuente