criar um jogo para linux

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

criar um jogo para linux

Mensagem por Convidad em Qua Abr 20, 2011 11:21 pm

A biblioteca SDL foi criada para facilitar a criação de jogos em Linux, *BSD, MacOS, Win32 e BeOS. Por ser uma biblioteca multi-plataforma, você terá um único código de seu jogo para diferentes sistemas operacionais. Neste artigo abordarei o básico sobre o uso dessa poderosa biblioteca.

Inicializando o uso do SDL em seu código
Primeiramente temos que incluir a biblioteca em nosso código, da seguinte maneira (todos os aplicativos SDL precisam dessa linha):

#include <SDL/SDL.h>

SDL é composto de 8 subsistemas. Neste artigo abordaremos 3 deles, os quais eu julgo serem os principais para o desenvolvimento de um jogo de pequeno porte:

* Manipulação de eventos;
* Entrada/Saída de dados;
* Vídeo.


Cada um desses subsistemas é inicializado através da função SDL_Init, também pode ser usada a função SDL_InitSubSystem, mas a função SDL_Init tem que ser usada antes de qualquer outra função SDL e ela inicializa automaticamente alguns subsistemas, como Entrada/Saída de dados e Manipulação de eventos.

Para iniciar o subsistema de Vídeo e os outros subsistemas padrões, devemos usar a função:

SDL_Init( SDL_INIT_VIDEO );

A função SDL_Init é completada com a função SDL_Quit, que deve ser usada quando terminada o uso da biblioteca SDL, esta função fecha todos os subsistemas inicializados.

Já sabemos como iniciar e como finalizar o uso da biblioteca SDL, o que nos permite criar a aplicação mais básica em SDL, mas de qualquer modo, precisamos aprender a manipular erros. Muitas funções SDL retornam um valor e indicam onde a função teve sucesso e onde ela falhou. Por exemplo, SDL_Init retorna -1 caso não seja possível iniciar um subsistema. SDL possui uma função muito prática para saber no que ocorreu o erro, sempre após ocorrer algum erro este erro é armazenado e podemos recorrer a ele usando a função SDL_GetError. Sempre use isso com freqüência, creio que você não pode ter muito conhecimento sobre um erro sem usar essa função.

Agora que já sabemos o básico, vamos ao primeiro exemplo:

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

int main()
{
printf("Iniciando SDL...\n");

if ( SDL_Init(SDL_INIT_VIDEO) == -1) {
printf("Impossível iniciar SDL.. %s\n", GetError());
exit(-1);
}

printf("SDL iniciado...\n");

printf("Fechando SDL...\n");

SDL_Quit();

printf("Fechando o aplicativo...\n");

exit(0);
}



Para compilar:

$ gcc teste.c -o teste -lSDL

[color:0e82=\"Red\"]Vídeo e gráficos
Vamos falar primeiramente sobre o vídeo, praticamente é para isso que o SDL é usado. Todos os programas em SDL tem que usar essa função de qualquer maneira.

Aqui vai um exemplo com comentários:

/* Cria uma surface SDL */
SDL_Surface *screen;

/* Inicia o vídeo */
if (SDL_Init(SDL_INIT_VIDEO) == -1) {
printf("Impossível iniciar SDL %s",SDL_GetError());
exit(-1);
}

/* Usando esta função não precisamos usar a SDL_Quit antes de
usar a função exit */*
atexit(SDL_Quit);

/* Aqui iremos iniciar o vídeo em resolução 640x480 com 16
bits-per- pixel, usando o Hardware */*
screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE);

/* Caso ele não consiga usar este modo de vídeo */
if (screen == NULL) {
printf("Impossível trocar modo de vídeo. %s", SDL_GetError());
exit(-1);
}

Agora que iniciamos o vídeo, não queremos que a nossa janela fique vazia, né? Então vamos carregar um BMP e colocá-lo no vídeo usando uma função.

void mostrar_bmp(char *arquivo)
{
SDL_Surface *imagem;

/* Carrega o Bitmap na surface criada */
imagem = SDL_LoadBMP(arquivo);
if (imagem == NULL) {
printf("Impossível carregar o arquivo %s: %s", arquivo, SDL_GetError());
exit(-1);
}

/* Coloca a imagem na tela */
if (SDL_BlitSurface(imagem, NULL, screen, NULL) < 0) {
printf("Erro no BlitSurface: %s", SDL_GetError());
exit(-1);
}

/* Atualiza toda a tela */
SDL_UpdateRect(screen, 0,0,0,0);

/* Desaloca a imagem */
SDL_FreeSurface(imagem);
}

[color:0e82=\"Red\"]Manipulação de eventos do teclado
Abordarei apenas a manipulação de eventos do teclado, mas a biblioteca SDL suporta a manipulação de eventos do mouse e de joysticks.

Creio eu que é mais fácil ver um código bem comentado do que várias linhas sobre teoria. Segue um exemplo com comentários.

* Cria um manipulador de eventos, usado tanto para
teclado/*ouse/joystick */
SDL_Event event;
/* Inicia SDL */
....
/* Muda o Vídeo */
....
/* Principal Loop do jogo */
while (1) {
/* Se algum evento for registrado */
while (SDL_PollEvent(&event)) {
/* Que tipo de evento foi registrado? */
switch (event.type) {
/* Pressionou tecla */
case SDL_KEYDOWN:
/* Qual tecla pressionada? */
switch (event.key.keysym.sym) {
case SDLK_ESCAPE:
printf("ESC pressionado.\n");
break;
case SDLK_UP:
printf("Seta para cima pressionada.\n");
break;
case SDLK_a:
printf("A pressionado.\n");
break;
}
}
}
}



Simples, não? Aqui segue uma lista com todos eventos disponíveis no teclado (copiado do site SDLdoc):

Links
Site oficial do SDL:

* http://www.libsdl.org/index.php


SDL Library Documentation - Um pouco desatualizado, porém útil:

* http://sdldoc.csn.ul.ie/index.php

PS: Eu tou a Fazer a versao linux do WOT (World of Tanks), apos, ter estado a copiar informação de .dll e .exe e depois compilar a informacao, descobri, e agora, so falta fazer um FTP e um VPN para fazer o download das actualizacoes Officiais do site e compilalas para SDL.

Informações:

VPN: Rede Privada Virtual ou Virtual Private Network é uma rede de comunicações privada normalmente utilizada por uma empresa ou um conjunto de empresas e/ou instituições, construída em cima de uma rede de comunicações pública (como por exemplo, a Internet). O tráfego de dados é levado pela rede pública utilizando protocolos padrão, não necessariamente seguros.

VPNs seguras usam protocolos de criptografia por tunelamento que fornecem a confidencialidade, autenticação e integridade necessárias para garantir a privacidade das comunicações requeridas. Quando adequadamente implementados, estes protocolos podem assegurar comunicações seguras através de redes inseguras.

Deve ser notado que a escolha, implementação e uso destes protocolos não é algo trivial, e várias soluções de VPN inseguras são distribuídas no mercado. Adverte-se os usuários para que investiguem com cuidado os produtos que fornecem VPNs. Por si só, o rótulo VPN é apenas uma ferramenta de marketing. By Wikipedia

FTP: File Tranfer Protocol (Protocolo de Transferência de Arquivos), e é uma forma bastante rápida e versátil de transferir arquivos (também conhecidos como ficheiros), sendo uma das mais usadas na internet.

Pode referir-se tanto ao protocolo quanto ao programa que implementa este protocolo (Servidor FTP, neste caso, tradicionalmente aparece em letras minúsculas, por influência do programa de transferência de arquivos do Unix / Linux).

A transferência de dados em redes de computadores envolve normalmente transferência de arquivos e acesso a sistemas de arquivos remotos (com a mesma interface usada nos arquivos locais). O FTP (RFC 959) é baseado no TCP, mas é anterior à pilha de protocolos TCP/IP, sendo posteriormente adaptado para o TCP/IP. É o padrão da pilha TCP/IP para transferir arquivos, é um protocolo genérico independente de hardware e do sistema operacional e transfere arquivos por livre arbítrio, tendo em conta restrições de acesso e propriedades dos mesmos. By Wikipedia e Editado por Tmnovo (Algumas das informaçoes estavam erradas)


Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: criar um jogo para linux

Mensagem por Convidad em Qui Abr 21, 2011 4:10 am

interessante, nao conhecia. Sou capaz de a usar se algum dia me der ao trabalho de programar pa linux/BSD/mac.

Contudo nao acho que os do WoT achem muita graça tu andares a fazer reverse engineering e a recompilar o jogo deles Muito Contente

Podias tambem ter dito que linguagem de programacao usaste ai nos exemplos (C?) e que linguagens essa library suporta Blink Devil

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: criar um jogo para linux

Mensagem por Convidad em Sex Abr 22, 2011 1:02 pm

Vou exprimentar no Ubuntu quando o meu PC vier e estiver operacional.

Depois digo algo.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: criar um jogo para linux

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum