Tutorial SFML

Neste artigo, abordarei a biblioteca SFML utilizando a linguagem C++. Segurem os cintos e vamos nessa!

[ Hits: 24.295 ]

Por: Thiago Henrique Hüpner em 02/06/2015


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.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Primeiro programa
   3. Eventos
   4. Primeiro desenho 2D
   5. Texto
   6. Texturas e Sprites
Outros artigos deste autor

Ubuntu/Debian/Kali Linux e outros no Android

Tutorial OpenGL v3.0

Tutorial OpenGL

Visual Studio no Linux

Tutorial OpenGL v2.0

Leitura recomendada

Android NDK: Desmistificando o acesso a códigos nativos em C

lib cURL - Trabalhe com URLs em C

Linguagem C - Funções Variádicas

A duplicação do buffer de saída na chamada de sistema fork() do Linux

Desenvolvendo para microcontroladores em GNU/Linux

  
Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts