www.programadoresdejogos.com

[P D J - Programadores e Desenvolvedores de Jogos]
Bem-vindo: Sex Set 10, 2010 12:13 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 26 mensagens ]  Ir para página 1, 2  Próximo
Autor Mensagem
 Título: dúvida vetor com vários objetos diferentes
MensagemEnviado: Sáb Jul 31, 2010 12:26 am 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 02, 2010 4:30 pm
Mensagens: 21
Localização: Niteroi, RJ
Olá a todos, estou desenvolvendo um jogo de estratégia copiando warcraft2 e cheguei num impasse. Tenho a classe pai Unity que define atributos que todas as unidades tem em comum tais como hp e armor, entre outros, e métodos move(), stop() e atack(). Mas para unidades guerreiras como o footman existem os métodos stand() e patrol(). Então resolvi criar uma classe Warrior extendendo Unity. Criei uma classe player que possui vetor de Unity de 200. Quando mando criar um Warrior e mando player.unity[i] = warrior; ele o faz mas não consigo implementar os métodos da classe filha.

Alguém tem idéia de como posso resolver isso? Cheguei a pensar em usar o container vector. Mas como sei pouco dele resolvi não mexer ainda e quis perguntar para vocês.

_________________
O vento sopra....


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Sáb Jul 31, 2010 1:14 pm 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Sáb Mai 24, 2003 4:42 pm
Mensagens: 1604
Localização: Cruzeiro SP
Bem vindo as limitações do polimorfismo.

você só vai conseguir fazer isso se a sua classe base tiver todos os métodos que você precisa, se não tiver vai ter que fazer algo tipo dynamic cast para identificar os tipos.

Detalhe que em C++ para você substituir métodos você tem que usar virtual e dizer qual método pode sofrer "overriding", diferente do java onde tudo é virtual por default.

Esse artigo pode ajudar um pouco quanto a arquitetura do seu jogo, não tanto no c++: http://www.pontov.com.br/site/index.php ... de-um-jogo

T+

_________________
Quer aprender a fazer jogos?
http://www.pontov.com.br/
Meus Jogos


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Sáb Jul 31, 2010 10:25 pm 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 02, 2010 4:30 pm
Mensagens: 21
Localização: Niteroi, RJ
Acho melhor não usar este dynamic cast. Parece que vai complicar as coisas. Eu consegui ter uma idéia para contornar isto. Ao invés de usar herança, eu posso criar um vetor de objetos specialAbility e neste objeto deixar todas estas habilidades peculiares tais como magias do mage e do death knigth, magias do ogre e do knight, patrol, stand e atack ground entre outros. E no construtor do objeto Unity passarei um parametro definindo qual unidade será criada no momento e ativarei os objetos do vetor specialAbility que serão usados por tal unidade.

O que você acha da idéia? Estou até pensando em já começar um jogo com um vetor de 8 objetos Player onde cada objeto deste possui uns 200 objetos Unity. E cada unidade criada será criado um objeto Unity a parte e terá um laço até achar um objeto Unity com variável ativo = 0(todas as 200 unitys serão iniciadas com este valor) e mandadei player[i].unity[j] = unityCriada. Será que é uma boa idéia? Oo

Outra coisa, gostei do seu artigo :P. Eu nem havia pensado no tempo de uma ação para outra. Eu simplesmente acionei um _sleep(100) para ficar num tempo agradável. Mas como eu faria no meu jogo usando o delta de tempo? Eu usaria um _sleep(delta)?

_________________
O vento sopra....


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Sáb Jul 31, 2010 10:46 pm 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Sáb Mai 24, 2003 4:42 pm
Mensagens: 1604
Localização: Cruzeiro SP
Vamos por partes...

Sleep, esqueça isso dentro de um jogo, você não quer pausar o seu jogo todo frame para controlar os personagens. Se o personagem faz algo que dura mais de um frame ele faz um pouquinho a cada frame até terminar.

Agora voltndo ao seu problema, no caso do footman, acho que toda unidade que atacar e se mover vai ter stand e patrol não?

Eu nunca pensei muito nos problemas de um jogo de rts, mas as habilidades especiais realmente vão ter que estar separadas de alguma forma, pois a IA vai usar em casos especiais.

O que você sugere ao meu ver me parece um sistema de componentes básico. Deve funcionar sim.

T+

_________________
Quer aprender a fazer jogos?
http://www.pontov.com.br/
Meus Jogos


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Dom Ago 01, 2010 3:03 am 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 02, 2010 4:30 pm
Mensagens: 21
Localização: Niteroi, RJ
Se não uso o sleep, então como irei fazer o controle do tempo? Vc chegou a falar de delta, mas como irei usar isto num jogo?


No caso do footman, tem algumas unidades que não esta habilidade de stand e patrol. No caso dos peões, dos zeppelins e dos magos. Na verdade, agora que lembrei. Tem 2 unidades que nem atacar atacam. Somente tem stop e move e uma delas tem harvester. Por isso pensei em por até estas habilidades comuns como habilidades especiais que precisam ser ativadas para serem usadas no jogo. Na verdade estou pensando em por todos os botões de comando como sendo objeto habilidades e cada unidade vai ter um array destas habilidades. Pq tem muitos casos especiais no rts warcraft2. Bem, acho que estou avançando demais sem ter a base do jogo formada :P.

abs

_________________
O vento sopra....


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Dom Ago 01, 2010 4:24 am 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Sáb Mai 24, 2003 4:42 pm
Mensagens: 1604
Localização: Cruzeiro SP
Citação:
Se não uso o sleep, então como irei fazer o controle do tempo? Vc chegou a falar de delta, mas como irei usar isto num jogo?


A cada step o personagem executa um pouco da animação, se você por sleep vai pausar o jogo.

Esse artigo mostra o basico desse conceito: [url=http://www.pontov.com.br/site/index.php/arquitetura-de-jogos/51-programacao/113-animacao-baseada-em-tempo]Animação Baseada
em Tempo[/url]

_________________
Quer aprender a fazer jogos?
http://www.pontov.com.br/
Meus Jogos


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 9:24 am 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Seg Jun 02, 2003 10:00 am
Mensagens: 1387
Localização: São Paulo -SP
Yarkhs, tome cuidado com esse seu esquema de herança. Não faz sentido você ter um vetor de uma dada classe se toda hora você tem que ficar fazendo cast e/ou checando pra ver qual tipo de objeto você tem. Se você tem definido um vetor de uma dada classe, então somente é correto usar métodos desta classe nos objetos deste vetor. Se estão entrando objetos de classes filhas nesse vetor, e você precisa utilizá-los como tal, então sua arquitetura está falha. Tente repensar a arquitetura de forma que isso não seja necessário.

Uma dica: crie todos os métodos comuns como abstratos (virtual) na classe mãe. Caso exista uma classe filha que não execute aquela ação, simplesmente implemente o método deixando ele vazio. Isso vai te permitir ter o vetor definido como um vetor para a classe mãe, mas com acesso a todos os métodos necessários. O mais correto ainda neste caso seria estes métodos, ao invés de vazios, jogarem uma exceção, dessa forma você garante que não está chamando o método de forma incoerente.

Outra dica: não use array, use std::vector.

_________________
Framework C++ OpenSource para jogos 2D:
http://easy2d.sourceforge.net


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 9:30 am 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Sáb Mai 24, 2003 4:42 pm
Mensagens: 1604
Localização: Cruzeiro SP
Jonatas,

nesse caso em particular colocar métodos vazios vai dar na mesma que ele checar o tipo. Pois se a IA decidir que alguém tem que patrulhar e escolher um NPC que não sabe patrulhar ela vai chamar o método patrol e nada vai acontecer e a IA vai achar que o NPC esta patrulhando.

sobre as habilidades especiais não tem jeito, ele vai ter que checar se as unidades possuem e dai tomar alguma ação. A questão é que a IA precisa saber quais tipos de unidades ela tem, então ao meu ver vai ter que ter uma lista separada de cada tipo para a IA do jogo poder tomar as ações.

Citação:
Outra dica: não use array, use std::vector.


Se for de tamanho fixo, não vejo vantagens em usar o vector. :)

_________________
Quer aprender a fazer jogos?
http://www.pontov.com.br/
Meus Jogos


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 11:01 am 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Sex Out 03, 2008 9:33 am
Mensagens: 45
Cara, eu não sei se entendi direito a sua arquitetura, mas se eu entendi, me parece que ela está meio ferrada !

Me parece que dependendo do tipo de unidade existem várias funções específicas, que a engine chama para executar a tarefa correta da entidade, por exemplo, para um soldado patrulhar , a engine chama a função Soldado.Patrulhar.

Se for isso cara, volta para a prancheta de desenho.

O ideal é que o código da sua engine veja qualquer unidade como sendo da classe Unity.

Tenha apenas uma função da classe base , que executa a tarefa da unidade ( seja ela qual for).
Por exemplo update().

A função update roda a IA da unidade, que é quem decide o que a unidade deve fazer.

Se eu entendi a sua arquitetura, você está jogando a IA do jogo para o núcleo da engine, o que não é bom , além de criar este problema de polimorfismo.

Você pode ter uma função de criação de Unidades do tipo :

unity * CreateUnity(unsigned int type)
{
switch(type)
{
case SOLDADO:
return new Soldado();
break;
}
}

O ponteiro retornado pode ser armazenado no vetor de unidades:

Unidades[i] = CreateUnity(SOLDADO)


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 11:05 am 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Sáb Mai 24, 2003 4:42 pm
Mensagens: 1604
Localização: Cruzeiro SP
Citação:
Me parece que dependendo do tipo de unidade existem várias funções específicas, que a engine chama para executar a tarefa correta da entidade, por exemplo, para um soldado patrulhar , a engine chama a função Soldado.Patrulhar


Acho que não é bem esse o problema. Ele disse que esta fazendo um RTS no estilo war2, nesse caso a IA de uma unidade é bem basico, ela executa tarefas como patrulhaar, atacar, etc. Mas ela não decide quando executar (apenas em casos bem especificos), mas nesse tipo de jogo você tem uma IA central que da ordem as unidades (assim como o jogador).


Concordo que a engine vai apenas chamar update ou algo do tipo, mas o IA vai fazer chamadas especificas e acredito que seja esse o problema dele.

T+

_________________
Quer aprender a fazer jogos?
http://www.pontov.com.br/
Meus Jogos


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 11:23 am 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Sex Out 03, 2008 9:33 am
Mensagens: 45
A IA central pode ser uma unidade.


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 11:25 am 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Sáb Mai 24, 2003 4:42 pm
Mensagens: 1604
Localização: Cruzeiro SP
Citação:
A IA central pode ser uma unidade.


Mas contiua o problema, ela vai ter que conhecer as demais unidades e vai ter que dar odens especificas a elas.

_________________
Quer aprender a fazer jogos?
http://www.pontov.com.br/
Meus Jogos


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 12:59 pm 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 02, 2010 4:30 pm
Mensagens: 21
Localização: Niteroi, RJ
Nossa que rumo tomou este tópico Oo. Bem gente, eu ainda não havia pensado em como a IA iria se comportar. Primeiramente eu estava tentando simular controle de uma única unidade na tela mas já tendo alguma base. Mas como a IA é importante para ditar a arquitetura do meu jogo eu tive uma idéia. Eu posso criar um atributo tipoUnidade que dirá como a IA verá aquela unidade. E pensei em 4 tipos básicos por enquanto. Peão, guerreiro, mago e transporte. Se a unidade for do tipo peão, então a IA entenderá que esta unidade terá que coletar recursos e jamais tentará mandá-la patrulhar, por exemplo.

Só não sei ainda como vou fazer com as habilidades. Acho que vou fazer o que falei em cima mesmo. Fazer um objeto chamado habilidades que possui todas as habilidades como por exemplo stop, atack, patrol, load, unload, haste e harvester, e dependendo do tipo de unidade que for criada, que será definido no construtor, algumas habilidades serão ativas e outras não.

O que vocês acham?

_________________
O vento sopra....


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 1:08 pm 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 02, 2010 4:30 pm
Mensagens: 21
Localização: Niteroi, RJ
Jonatas, eu pensei em fazer com array pq já entendo bem disso e sei quase nada de std::vector. Mais pra frente posso mudar a estrutura. Estou tentando manter o jogo o mais simples possível para tornar menos difícil a tarefa de criar um jogo na unha :P.

Outra coisa, o que vocês chamam de engine neste caso específico? Não sei separar a engine do jogo. O que eu sei sobre engines é apenas um pouco de estudo com a Unity3D que o Sanches me apresentou há poucos dias atrás.


Antes que eu esqueça, obrigado a todos pela ajuda :P. Estou adorando esta discussão. Fica mais fácil desenvolver com pessoas que tem bem mais experiência opinando.

_________________
O vento sopra....


Voltar ao topo
 Perfil  
 
 Título: Re: dúvida vetor com vários objetos diferentes
MensagemEnviado: Seg Ago 02, 2010 2:00 pm 
Offline
Moderador
Moderador
Avatar do usuário

Registrado em: Seg Jun 02, 2003 10:00 am
Mensagens: 1387
Localização: São Paulo -SP
BCSanches escreveu:
nesse caso em particular colocar métodos vazios vai dar na mesma que ele checar o tipo. Pois se a IA decidir que alguém tem que patrulhar e escolher um NPC que não sabe patrulhar ela vai chamar o método patrol e nada vai acontecer e a IA vai achar que o NPC esta patrulhando.


Por isso que eu falei da exceção, assim isso não tem perigo de acontecer. Mas a idéia do mathewcraw é melhor. =)

Quanto ao vector, eu acho que o tamanho não vai ser fixo não. Pelo que eu entendo desses RTSs, não existe limite de número de unidades.

Quanto à engine, relaxa cara. Isso é só um jargão utilizado pra definir qual parte do jogo é reaproveitável. Geralmente a engine é uma biblioteca com um monte de classes/métodos prontos que você apenas utiliza pra facilitar a sua vida na hora de fazer um jogo.

_________________
Framework C++ OpenSource para jogos 2D:
http://easy2d.sourceforge.net


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 26 mensagens ]  Ir para página 1, 2  Próximo

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Procurar por:
Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB