GameDev Brasil
A comunidade brasileira de desenvolvimento e programação de jogos.
 
Home - Fórum - Tutoriais - Projetos - Galeria - Contato

 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar   PerfilPerfil   EntrarEntrar 

Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   

Suas melhores técnicas!

 
Novo Tópico   Responder Mensagem    GameDev Brasil -> Programação de jogos em geral
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Speeder
Moderador
Registrado em: Sábado, 24 de Junho de 2006
Mensagens: 360
MensagemEnviada: Qua Mai 05, 2010 10:58 am    Assunto: Suas melhores técnicas! Responder com Citação

Oi pessoal!

Resolvi propor aqui, para podermos reativar o fórum, que digam quais são suas melhores técnicas de programação...

Exemplo:
Como você faz para controlar todas as milhões de balas na tela em um bullet hell?

Ou... como você faz a sua IA?

Ou, como fazer o efeito especial "x" muito legal que tem no seu jogo?


Bom, eu vou citar a minha técnica que tenho orgulho...
Eu precisava de uma estrutura de dados para organizar os objetos na tela. Criei o seguinte:

Tenho um array de ponteiros, esse array aponta para os objetos reais.
Portanto, eu tenho acesso randômico, rápido, pois posso invocar qualquer objeto do array sem dificuldade.

Além disso, objetos novos, são colocados no fim do array (a é... acompanhando o array, tem um contador de tamanho). Para não ter dificuldade nenhuma. usa o mínimo de ciclos possíveis do processador.

E quando qualquer objeto é deletado (mesmo no meio do array), o último elemento é copiado para o local do objeto deletado. Novamente, economizando ciclos (só preciso copiar o ponteiro, e diminuir o contador...)

A desvantagem, é que por usar um array, e não outra estrutura redimensionável, eu tenho que estar com ele sempre alocado, e no tamanho necessário.

Para isso, tenho no código uma lista de constantes (exemplo: número máximo de naves inimigas: 100). Todos os objetos antes de serem criados, primeiro verificam se tem espaço no array, caso não tenha, eles cancelam a criação (para não gastar ciclos criando e deletando em seguida) e notificam o programa.


A é, eu fiz isso usando templates do C++, não preciso guardar só ponteiros Smile posso guardar qualquer coisa que caiba em um array (inclusive objetos inteiros, mas fazer isso é inútil e desnecessário...), toda vez que preciso de um array "pseudo-redimensionável" eu uso esse template, a maior utilidade é na hora de usar laços (eu simplesmente olho se o contador é menor que a variável do template que diz o tamanho atual do array... assim não tenho que fazer comparações estranhas para saber se o array acabou).

Graças a esse array, também posso contar memory leaks (eu carrego todos os arquivos de imagme e som, e registro no array, usando uma classe especial de organização de memória... ai na hora de fechar o programa, eu vejo se algum array tem contador acima de 0, e retorno o valor dos contadores, assim eu sei que tem memory leak nos recursos do jogo).
_________________
Membro do IGDA São Paulo
Designer do Dominoze (www.gamieon.com)
Contribuinte da PDJZine
Meu site: www.gamedesigner.co.nr
Meu blog: criadordejogos.wordpress.com
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Speeder
Moderador
Registrado em: Sábado, 24 de Junho de 2006
Mensagens: 360
MensagemEnviada: Ter Mai 11, 2010 10:47 pm    Assunto: Responder com Citação

Que isso gente? Só eu sei programar aqui?

Que decepcionante hein?

Assim num tem assunto mesmo... nem dando o assunto de mão beijada a galera fala algo...
_________________
Membro do IGDA São Paulo
Designer do Dominoze (www.gamieon.com)
Contribuinte da PDJZine
Meu site: www.gamedesigner.co.nr
Meu blog: criadordejogos.wordpress.com
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Qua Mai 12, 2010 12:23 pm    Assunto: Responder com Citação

Fala Speeder. Curti seu post cara. vou ver oque posso colaborar aqui. qualquer coisa da um toque. otima tequinica a sua. parabens
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
mestreoelze
Membro novo
Registrado em: Quarta-Feira, 14 de Janeiro de 2009
Mensagens: 19
Localização: BH -MG
MensagemEnviada: Qua Mai 12, 2010 4:20 pm    Assunto: Responder com Citação

Eu gostei da idéia também, mas ainda não sou "programador", esotu começando a caminhar na área e vim pegar técnicas né.

Realmente, dá o assunto mas ninguém rende, o fórum ta morrendo? O.O"
VAMOS FALAR GENTE, POSTEM!!!!!!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
c++master
Membro júnior
Registrado em: Terça-Feira, 16 de Junho de 2009
Mensagens: 41
MensagemEnviada: Sáb Jun 26, 2010 6:38 pm    Assunto: Responder com Citação

O tópico tem apenas 2 meses, acho que isso não é tão velho...

Speeder, o que você fez é totalmente desnecessário. A C++ Standard Library, a biblioteca padrão do C++, que já vem inclusa na linguagem, tem um template que faz exatamente a mesma coisa.

Um exemplo do uso desse template:
Código:

#include <list> // Vamos usar o template list da C++ Standard Library. Note que não é um  arquivo (não tem o .h) já que a C++ Standard Library está no compilador

using namespace std;

int main()
{

list<int> numeros; //declara uma lista de variaveis do tipo int

//o loop abaixo coloca os numeros de 1 a 100 na lista
for(int i = 0; i <= 100; i++)
{

numeros.push_back(i); // a função pushback do template adiciona um elemento no fim da lista

}

//o loop abaixo retira os numeros de 50 a 100 da lista
for(int i = 50; i <= 100; i++)
{

mumeros.remove(i); // a função remove retira da lista os elementos cujo valor seja igual ao valor passado como argumento

}

return 0;

}


Note que eu poderia ter usado ponteiros para inteiros (int *) na inicialização do template, mas não usei para melhorar o exemplo.

Mais informções:
C++ Standard Template Library (parte da C++ Standard Library, contém o template list)
list
Ambos em inglês, num ótimo site sobre C++
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email
Speeder
Moderador
Registrado em: Sábado, 24 de Junho de 2006
Mensagens: 360
MensagemEnviada: Ter Jun 29, 2010 3:09 pm    Assunto: Responder com Citação

Eu sei que o STL tem Smile

Mas eu fiz para aprender...

Alías, ainda não usei o STL (até agora não precisei, tudo o que eu precisei, e tem no STL, eu resolvi fazer para aprender...)

Essa estrutura de dados, foi meu primeiro contato com Templates Smile (eu não sei como usei C e C++ por 10 anos antes de ver template Oo)
_________________
Membro do IGDA São Paulo
Designer do Dominoze (www.gamieon.com)
Contribuinte da PDJZine
Meu site: www.gamedesigner.co.nr
Meu blog: criadordejogos.wordpress.com
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rogeriob2br
Membro intermediário
Registrado em: Terça-Feira, 14 de Julho de 2009
Mensagens: 117
MensagemEnviada: Ter Jun 29, 2010 6:25 pm    Assunto: Responder com Citação

kkkk...

TRIPLE FLOOD MODERATOR MASTER!!!


nem sempre vale apena chamar funções externas(isso foi minha prof de Alg. e Prog. que disse) e esta solução dele as vezes pode ser usada em casos onde não se tem acesso as mesmas funções que vc usou...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Qua Jun 30, 2010 11:04 am    Assunto: Responder com Citação

Bom a chamada de funções externas depende da necessidade e disponibilidade. e se vale a pena ou não implementação de tal recurso. No caso da STL por exemplo. ter uma classe generica de desenvolvimento proprio pode ajudar no desenvolvimento em outras plataformas como para iPhone. Que depende de conversões na STL para se adaptar as especificações de compilação do mesmo. Tudo depende de Custo-x-Benefício.

Um exmplo e o uso de DLL's. Não se tem a necessidade de construção de uma DLL para executar funções simples e de facil implementação.

Ao invez de criar uma dll para fazer (Ex):
DLL_EXTERN_SET
Código:
extern "C" __declspec float _SET_VALUE ( float value, float inc )
{ reutrn (value+inc); }

vale mais a pena usar no proprio codigo:
Código:
float setValue( float value, float inc ) { return (value+inc); }


Tudo é questão do foco do desenvolvimento. e se compensa ou não a chamada externa. e vale lembrar que criar e bom para o aprendizado.
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    GameDev Brasil -> Programação de jogos em geral Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibído.
Responder Tópicos Proibído
Editar Mensagens: Proibído.
Excluir Mensagens: Proibído.
Votar em Enquetes: Proibído.


Powered by phpBB © 2001, 2002 phpBB Group
Traduzido por: Suporte phpBB
Igloo Theme Version 1.0 :: Created By: Andrew Charron