Tutorial SFML
Neste artigo, abordarei a biblioteca SFML utilizando a linguagem C++. Segurem os cintos e vamos nessa!
Parte 3: Eventos
Como viram no exemplo anterior, precisei criar um loop de 100 ciclos para aparecer a janela.
Mas com eventos, a história é outra...
Segue exemplo:
Bom, agora apareceram várias coisas novas:
Agora podemos manter a janela aberta por mais tempo, não é?
Mas, precisamos manipular o teclado, por exemplo, fechar a janela com o Esc. Para isso, podemos apenas acrescentar.
Esse if verifica se a tecla está pressionada, nesse caso, o Esc.
E os eventos de mouse? Pode ser feito como neste exemplo:
Se for para o botão esquerdo do mouse:
Agora, se quiser a posição, temos que fazer algo mais complexo:
O sf::Vector2i é um vetor 2d de inteiros e a função getPosition retorna um sf::Vector2i.
Tá, mas como utilizamos ele? Simples, apenas fazer:
Apenas um exemplo de uso:
E para definir a posição do mouse:
Agora que sabemos manipular os eventos, vamos brincar com isso.
Mas com eventos, a história é outra...
Segue exemplo:
// Inclui a Biblioteca de Graficos da SFML
#include <SFML/Graphics.hpp>
#include <iostream>
int main(void){
//Cria uma janela de 400x400
sf::RenderWindow janela(sf::VideoMode(400,400),"Primeiro Exemplo");
// Variavel para eventos
sf::Event evento;
// Variavel do loop principal
bool estaRodando = true;
while(estaRodando){
// Enquanto existir eventos coloque na variavel "evento"
while(janela.pollEvent(evento)){
// Caso foi clicado no 'X' da janela
if (evento.type == sf::Event::Closed)
estaRodando = false;
}
// "Limpa a tela" de branco
janela.clear(sf::Color(255,255,255));
// E mostra a janela
janela.display();
}
// Fecha a janela
janela.close();
// Ocorreu tudo bem
return EXIT_SUCCESS;
}
Bom, agora apareceram várias coisas novas:
- A variável de eventos :: sf::Event evento;
- O loop principal :: while(estaRodando);
- O loop de eventos :: while(janela.pollEvent(evento));
- O evento de clicar no X da janela :: if(evento.type == sf::Event::Closed);
Agora podemos manter a janela aberta por mais tempo, não é?
Mas, precisamos manipular o teclado, por exemplo, fechar a janela com o Esc. Para isso, podemos apenas acrescentar.
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape)) estaRodando = false;
Esse if verifica se a tecla está pressionada, nesse caso, o Esc.
E os eventos de mouse? Pode ser feito como neste exemplo:
Se for para o botão esquerdo do mouse:
if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) // Faz algo
Agora, se quiser a posição, temos que fazer algo mais complexo:
// Fora do loop sf::Vector2i posMouseDesktop, posMouseJanela; // Dentro do loop de eventos posMouseDesktop = sf::Mouse::getPosition(); posMouseJanela = sf::Mouse::getPosition(janela);
O sf::Vector2i é um vetor 2d de inteiros e a função getPosition retorna um sf::Vector2i.
Tá, mas como utilizamos ele? Simples, apenas fazer:
- posMouseDesktop.x :: para a posicao X
- posMouseDesktop.y :: para a posicao Y
Apenas um exemplo de uso:
std::cout << posMouseDesktop.x << " " << posMouseDesktop.y << std::endl;
E para definir a posição do mouse:
// Em relação ao Desktop sf::Mouse::setPosition(sf::Vector2i(10, 50)); // Em relação a Janela sf::Mouse::setPosition(sf::Vector2i(10, 50),janela);
Agora que sabemos manipular os eventos, vamos brincar com isso.