El problema de que el mensaje no se muestre inmediatamente cuando desactivas las físicas (hasta que vuelves a activarlas) puede deberse a cómo se gestiona el búfer de salida estándar (stdout) en C. Por defecto, stdout está configurado para usar un búfer de línea, lo que significa que los mensajes no se imprimen inmediatamente en la consola a menos que:

  1. Se encuentre un carácter de nueva línea (\\n) en el mensaje.
  2. Se llame explícitamente a fflush(stdout) para vaciar el búfer y forzar la impresión.

Solución

Si no estás viendo el mensaje hasta que ocurre otro evento, es probable que el mensaje esté quedando en el búfer y no se imprima hasta que se vacíe automáticamente (por ejemplo, cuando se imprime otro mensaje o el programa termina).

Para solucionar esto, tienes dos opciones:

  1. Asegúrate de incluir un salto de línea (\\\\n) al final del mensaje. Esto fuerza a stdout a vaciar el búfer y mostrar el mensaje inmediatamente. Por ejemplo:

    printf("Warning: Physics is disabled.\\\\n");
    
    
  2. Usa fflush(stdout) después de printf. Esto vacía el búfer manualmente y asegura que el mensaje se imprima de inmediato, incluso si no hay un salto de línea:

    printf("Warning: Physics is disabled.");
    fflush(stdout);
    
    

Recomendación

La opción más sencilla y común es incluir el carácter de nueva línea (\\n) al final de cada mensaje. Esto es suficiente en la mayoría de los casos y es una práctica estándar en C para evitar problemas de búfer.

Si ya estás incluyendo el \\n y el problema persiste, entonces podría estar relacionado con cómo la biblioteca mlx gestiona los eventos y la salida estándar. En ese caso, usar fflush(stdout) sería una solución más robusta.