Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: blostec on October 29, 2008, 04:12:20 PM

Title: Centrar la ventana
Post by: blostec on October 29, 2008, 04:12:20 PM
Veréis he estado haciendo una pruebas para mostrar la ventana del juego en el centro, he utilizado el mod_wm para conseguirlo, mi pregunta es si existe alguna función para que la ventana por defecto este centrada en la pantalla o hay que hacerlo manualmente. Os dejo el código de como lo he hecho, no es el centro exacto porque habría que considerar el tamaño del marco de la ventana.

Actualizado: Corregido el código para mostrar la ventana correctamente en el centro usando la función GET_WINDOW_SIZE.

[code language="bennu"]
//Ejemplo de como centrar la ventana en la pantalla
//compilado con la r34

PROGRAM Centrar;

import "mod_key.dll";
import "mod_video.dll";
import "mod_proc.dll";
import "mod_map.dll";
import "mod_text.dll";
import "mod_screen.dll";
import "mod_wm.dll";

//******************************************************************

GLOBAL

pantalla_x = 320;      //modo de video x
pantalla_y = 200;      //modo de video y
colores = 16;          //color 8, 16, 32 bits
alto, ancho;           //para guardar resolucion pantalla
ventana_x, ventana_y;  //para guardar tamaño de la ventana


//******************************************************************

BEGIN

set_mode(pantalla_x, pantalla_y, colores);

//obtener resolucion pantalla
get_desktop_size(&ancho, &alto);

//obtener tamaño ventana y modo de video 
get_window_size(&ventana_x, &ventana_y, &pantalla_x, &pantalla_y);                         
                       
//centra la ventana
set_window_pos((ancho/2)-(ventana_x/2), (alto/2)-(ventana_y/2));     

load_fpg("centrar.fpg");
put_screen(0,1);

write(0,60,165,3,"Pulsa ALT y ENTER para mostrar");
write(0,60,175,3,"pantalla completa o ventana");
write(0,60,190,3,"Pulsa ESC para salir.");

while (!(key(_esc)))
      //pasar de ventana a pantalla completa y viceversa
      if  ((key(_ALT))  and (key(_ENTER))) 
           full_screen = not full_screen;
           set_mode(pantalla_x, pantalla_y, colores);
     end
     frame;
end

let_me_alone();

END
[/code]

También os adjunto el ejemplo compilado por si alguien lo quiere ver in situ.
Title: Re: Centrar la ventana
Post by: SplinterGU on October 29, 2008, 09:26:56 PM
tenes la funcion

GET_WINDOW_SIZE(int *winwidth, int *winheight, int *screenwidth, int *screenheight)

o sea, los 2 primeros es el tamaño de la ventana incluyendo los marcos y los 2 segundos es el tamaño de la ventana que corresponde al ancho y alto seteado con set_mode.
Title: Re: Centrar la ventana
Post by: La momia que fuma on November 13, 2008, 04:16:14 PM
Blostec, tal como lo tienes tu, pero cogiendo el tamaño de la ventana de los 2 primeros parametros de la función que menciona splinter, a mi me va de lujo.

(Gracias por la idea, por cierto, no estaba familiarizado con las funciones de ventana y esto me ha servido de práctica :P)
Title: Re: Centrar la ventana
Post by: SplinterGU on November 13, 2008, 05:11:55 PM
bueno, estas funciones son propias de bennu, la version fenix tenia pocas de estas (solo move_window, minimize, set_icon y set_title... el resto son todas nuevas), por eso es logico que no estes familiarizado...
Title: Re: Centrar la ventana
Post by: La momia que fuma on November 13, 2008, 08:26:31 PM
Es que tampoco estaba familiarizado con las de Fenix, nunca me puse a hurgar con la ventana hasta hoy XD
Title: Re: Centrar la ventana
Post by: TYCO on November 14, 2008, 10:11:02 AM
Se supone que todo esto de mover la ventana y tal funciona en todas las plataformas (linux, etc) o no???
Title: Re: Centrar la ventana
Post by: SplinterGU on November 14, 2008, 11:10:03 AM
no se supone, lo hace...
Title: Re: Centrar la ventana
Post by: Danielo515 on March 01, 2009, 04:14:27 PM
A partir de que version de bennu está disponible get_desktop_size?? porque el compilador de la wip_11 me dice que es una función no definida.

Gracias.
Title: Re: Centrar la ventana
Post by: SplinterGU on March 01, 2009, 05:08:44 PM
tenes que usar la ultima version, no te cambia nada a nivel codigo.
Title: Re: Centrar la ventana
Post by: Danielo515 on March 01, 2009, 08:11:03 PM
Gracias splinter. Lo he vuelto a probar y ahora sí que me funciona el código con la última versión (no el de la ventana, sino el código de la aplicación en general). Hace dos días ese mismo código no funcionaba con la última versión, de hecho, hace dos horas no funcionaba en un pendrive, luego funcionó en el disco duro de un tercer ordenador y al recopiarlo al pendrive, también funcionaba. Yo empiezo a pensar que esto tiene tintes satánicos....
Title: Re: Centrar la ventana
Post by: Danielo515 on March 01, 2009, 08:29:00 PM
Por lo que veo algo sí que cambió. Antes cuando llamabas al programa sin nada el numero de argumentos era 0, ahora sin embargo el numero de argumentos es uno. Personalmente me parecía más claro cuando el número de argumentos era 0, y argv[argc] era el último argumento. Ahora hay que hacer argv[argc-1] para acceder al último argumento ¿cierto?
Title: Re: Centrar la ventana
Post by: SplinterGU on March 01, 2009, 10:17:09 PM
ahora es como es en C... antes no funcionaba del toco bien...
Title: Re: Centrar la ventana
Post by: Windgate on April 01, 2009, 04:29:47 PM
Splinter, he abierto un nuevo hilo para el tema, pero como veo que aquí se habla de set_icon() y es un tema activo aprovecho...

No me funciona set_icon(), he probado todo y no hay manera, ¿Alguien sabe algo sobre esta función?
Title: Re: Centrar la ventana
Post by: blostec on April 02, 2009, 11:08:18 AM
Te he respondido lo del icono en tu post.
Title: Re: Centrar la ventana
Post by: blostec on April 02, 2009, 01:31:38 PM
Aprovecho la ocasión para corregir el ejemplo usando la función GET_WINDOW_SIZE tal y cómo me aconsejó SplinterGU y la momia. Actualizado el primer post.
Title: Re: Centrar la ventana
Post by: Windgate on April 09, 2009, 10:23:59 AM
Probado, funciona perfectamente y ya está integrado en mi Just Fantasy, incluído lo de cambiar de modo ventana a modo pantalla completa. Además he creado un .prg separado para usarlo como recurso en todos mis juegos.

Plazer...