Pular para o conteúdo

Tutorial SFML

Neste artigo, abordarei a biblioteca SFML utilizando a linguagem C++. Segurem os cintos e vamos nessa!
Thiago Henrique Hüpner Thihup
Hits: 27.561 Categoria: C/C++ Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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:

// 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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução
   2. Primeiro programa
   3. Eventos
   4. Primeiro desenho 2D
   5. Texto
   6. Texturas e Sprites

Tutorial OpenGL v3.0

Tutorial OpenGL v2.0

Ubuntu/Debian/Kali Linux e outros no Android

Visual Studio no Linux

Tutorial OpenGL

lib cURL - Trabalhe com URLs em C

Como funcionam os alocadores de memória do STD C?

Cuidado com números em Ponto Flutuante

Criando aplicativos para o iPhone no Linux (sem Xcode e MacOS X)

A mágica do polimorfismo e seus conceitos na ótica de C/C++

#1 Comentário enviado por fabio em 02/06/2015 - 18:27h
Belo artigo, parabéns!
#2 Comentário enviado por Thihup em 02/06/2015 - 18:59h

[1] Comentário enviado por fabio em 02/06/2015 - 18:27h

Belo artigo, parabéns!


Muito Obrigado =D

Gostei desse formato de artigo, vou começar a migrar meus artigos para esse formato, fica mais claro e mais simples =D

Valew Fábio!
#3 Comentário enviado por removido em 03/06/2015 - 05:40h
Por um instante pensei que o ML final era de Markup Language. Não conhecia.

Interessante. Parabéns.
--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden
#4 Comentário enviado por Thihup em 03/06/2015 - 08:04h

[3] Comentário enviado por listeiro_037 em 03/06/2015 - 05:40h

Por um instante pensei que o ML final era de Markup Language. Não conhecia.

Interessante. Parabéns.
--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Opa Fera, Valew!

Não tinha outro nome para colocar, dai ficou "Tutorial SFML", mas garanto que os próximos não serão tão "estranhos" (sei lá, não sou do futuro...)

Valew!!!
#5 Comentário enviado por edsonmarcks em 09/06/2015 - 13:57h
Cara parabéns! pelo tutorial bem claro. Vou até me arriscar no C++ kkkk.
#6 Comentário enviado por Thihup em 09/06/2015 - 17:19h

[5] Comentário enviado por edsonmarcks em 09/06/2015 - 13:57h

Cara parabéns! pelo tutorial bem claro. Vou até me arriscar no C++ kkkk.


Valew Fera.

Arrisque, C++ é bom mesmo.

Se quiser me adicionar no Skype: thihup

[]'s

T+
#7 Comentário enviado por CiroboyBR em 09/02/2016 - 17:58h
Muito bom seu artigo, compilou todos os exemplos sem nenhum problema.

Contribuir com comentário

Entre na sua conta para comentar.