criar um jogo para linux
Página 1 de 1
criar um jogo para linux
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)
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
Re: criar um jogo para linux
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
Podias tambem ter dito que linguagem de programacao usaste ai nos exemplos (C?) e que linguagens essa library suporta
Contudo nao acho que os do WoT achem muita graça tu andares a fazer reverse engineering e a recompilar o jogo deles
Podias tambem ter dito que linguagem de programacao usaste ai nos exemplos (C?) e que linguagens essa library suporta
Convidad- Convidado
Re: criar um jogo para linux
Vou exprimentar no Ubuntu quando o meu PC vier e estiver operacional.
Depois digo algo.
Depois digo algo.
Convidad- Convidado
Tópicos semelhantes
» Como criar votações num fórum?
» Para os viciados de CS (e para todos os outros tambem!) estas animacoes sao de chorar a rir!
» Para o pessoal de WoT e para os entusiastas de cultura belica
» Jogo de browser
» Novo jogo WarGaming
» Para os viciados de CS (e para todos os outros tambem!) estas animacoes sao de chorar a rir!
» Para o pessoal de WoT e para os entusiastas de cultura belica
» Jogo de browser
» Novo jogo WarGaming
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|