Desenvolvimento de jogos no Linux Educacional - Criando janela


#1

Captura de tela de 2017-10-03 14-27-33

Estou aprendendo SDL no Linux Educacional 6 e está funcionando bem. O Tutorial é inglês, mas estou traduzindo os comentários.

//Usando SDL e entrada/saida padrão
#include <SDL2/SDL.h>
#include <stdio.h>

//Variáveis constantes para dimensão da tela
const int SCREEN_WIDTH = 640; //Largura da tela
const int SCREEN_HEIGHT = 480; //Altura da tela

//função principal, onde vem a criação da janela.
int main(int argc, char* args[]){
//A Barra de título da janela
SDL_Window* window = NULL;
//A Superficie do título da janela
SDL_Surface* screenSurface = NULL;

//Inicialize o SDL
if(SDL_Init(SDL_INIT_VIDEO) < 0){
	printf("SDL não pode inicializar! SDL_Error: %s\n", SDL_GetError());
}
else{
	//Criar janela
	window =

SDL_CreateWindow(“SDL_Tutorial”,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
if(window == NULL){
printf(“Janela não será criada! SDL_Error: %s\n”, SDL_GetError());
}
else{
//Pegar a superficie da janela
screenSurface = SDL_GetWindowSurface(window);
//Preencha a superficie com a cor branca
SDL_FillRect(screenSurface,NULL,SDL_MapRGB(screenSurface->format,0xFF,0xFF,0xFF));
//Atualize a superficie
SDL_UpdateWindowSurface(window);
//Espere 2 segundos
SDL_Delay(2000);
}
}

//Destruindo a janela
SDL_DestroyWindow(window);
//Sair do subsistema do SDL
SDL_Quit();
//Retornar uma saída
return 0;

}

Pàra fazer o processo de compilação bastar rodar o seguinte comando:
g++ main.cpp -w -lSDL2 -o main

Para instalar o SDL 2:
sudo apt-cache search libsdl2

Para instalar:
sudo apt install libsdl2-dev

Em breve estarei postando mais atividades com SDL para a comunidade incentivar o desenvolvimento de jogos no Linux.

Quem quiser seguir o estudo que eu estou praticando poderá entrar no seguinte site:
http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php

Atenciosamente,
Eric Douglas Koga


#2

Captura de tela de 2017-10-03 17-35-10

Fala galera, consegui passar mais uma lição sobre SDL estou compartilhando como eu entendi o código e como eu traduzi ele do inglês para o português.
Aqui temos uma lição de como carregar a nossa primeira imagem e trabalhar com encapsulamento de dados dentro de funções que são dividias e podem ser chamadas dentro da main para evitar ficar re-digitando o mesmo trecho de código.

#include <SDL2/SDL.h>
#include <stdio.h>

//Declarando funções aqui no topo
bool init(); //Iniciar subir o SDL e criar a janela
bool loadMedia(); //Carregar nossos arquivos de mídia
void close(); //Limpar o cache de midia e fechar o SDL

//Variaveis constantes de dimensão da tela
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

//Declarar variáveis globais
SDL_Window* gWindow = NULL; //Barra de titulo da janela
SDL_Surface* gScreenSurface = NULL; //Superfície da janela
SDL_Surface* gHelloWorld = NULL; //Nossa imagem será carregada na tela

//Fazer a primeira função init de inicialização
bool init(){
//Inicializar com sucesso
bool success = true;

//Inicializar SDL
if(SDL_Init(SDL_INIT_VIDEO) < 0){
	printf("SDL não inicializado! SDL_Error: %s/n",SDL_GetError());
	success = false;
}
else{
	//Criar a janela
	gWindow = SDL_CreateWindow("Minha janela",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_WIDTH,SCREEN_HEIGHT,
	SDL_WINDOW_SHOWN);
	if(gWindow == NULL){
		printf("A Janela nao pode ser construida!SDL_Error: %s/n", SDL_GetError());
		success = false;
	}
	else{
		//Pegar a superfície da janela
		gScreenSurface = SDL_GetWindowSurface(gWindow);
	}
}
//Retorne que deu tudo certo na criação da janela e da barra de título.
return success;

}

//Criando a função de carregar imagens
bool loadMedia(){
//Sinal se carregou tudo com sucesso
bool success = true;

//Carregar o sprite
gHelloWorld = SDL_LoadBMP("hello_world.bmp");

if(gHelloWorld == NULL){
	printf("Imagem não encontrada %s! SDL_Error: %s/n", "hello_world.bmp", SDL_GetError());
	success = false;
}
//Retorna que deu tudo certo ao carregar a imagem
return success;

}

//Função para fechar tudo
void close(){
//Desalocar a imagem da superficie
SDL_FreeSurface(gHelloWorld);
gHelloWorld = NULL; //A Variavel onde estava a imagem agora vai estar Nulo ou seja vazia
//Destrua a janela
SDL_DestroyWindow(gWindow);
gWindow = NULL; // Janela vai receber valor nulo e posições zeradas não existirá mais
//Sair do sistema SDL
SDL_Quit();
}

//Função principal
int main(int argc, char* args[]){
//Iniciar a janela
if(!init()){
printf(“Essa função não existe!\n”);
}
else{
//Chamar a função de mídia
if(!loadMedia()){
printf(“Não existe essa função de mídia!\n”);
}
else{
//Aplicar a imagem
SDL_BlitSurface(gHelloWorld, NULL, gScreenSurface, NULL);
//Atualizo a superfície
SDL_UpdateWindowSurface(gWindow);
//Esperar por 4 segundos
SDL_Delay(4000);
}
}
//Fechar o SDL
close();
//Retorna uma saída
return 0;
}