segunda-feira, 21 de janeiro de 2013

Trabalhando com janelas

A partir de agora, começamos a complicar um pouco as coisas. Mas não se assuste, pois veremos as coisas  com mais detalhes. Vamos ver como abrir e manejar uma janela.

 Abrir uma janela

Usaremos a classe sf::Window. Veja como é simples:
#include <SFML/Window.hpp>

int main()
{
    sf::Window window(sf::VideoMode(800, 600), "Titulo");

    return 0;
}

Bem, definimos o tamanho da janela (sem contar a barra de titulo e as bordas) e o seu título.
Você pode passar um terceiro argumento, que é uma combinação de estilos.
  • sf::Style::None: sem decoração, não combina com outros estilos
  • sf::Style::Titlebar: barra de titulos
  • sf::Style::Resize: redimensionável e botão maximizar
  • sf::Style::Close: botão fechar
  • sf::Style::Fullscreen: tela cheia, não combina com outros estilos
  • sf::Style::Default: estilo padrão, que é um atalho para Titlebar | Resize | Close
Há também um quarto argumento (opcional), que define opções específicas do OpenGL (tutorial).
Se você quiser criar a janela depois de já tê-la instanciado, ou então recriá-la com um modo de vídeo ou título diferente, você pode usar a função create, que usa os mesmos argumentos que o construtor.
#include <SFML/Window.hpp>

int main()
{
    sf::Window window;
    window.create(sf::VideoMode(600, 600), "Janela");

    return 0;
}

Modificando a janela:

// Mudar a posição window.setPosition(sf::Vector2i(10, 50)); //Mudar o tamanho window.setSize(sf::Vector2u(640, 480)); //Mudar o título window.setTitle("SFML window");

Controlando a taxa de atualização:
window.setVerticalSyncEnabled(true); //assim sua aplicação vai desenhar na mesma frequência que o monitor (geralmente 60 vezes por segundo)

ou

window.setFramerateLimit(30); //assim você define uma taxa máxima em vez de automatizar
Pegando dados:

//Obter o tamanho sf::Vector2u size = window.getSize(); unsigned int width = size.x; unsigned int height = size.y;

O que mais você poderia saber?

- Você pode criar várias janelas e manejá-las junta ou separadamente.
- Não é suportado o uso de vários monitores.

Veja mais: OpenGL na janelaReferência da classe sf::Window.

Nenhum comentário:

Postar um comentário