Fórum Sharpgames
 
 
  Forum  Criação de Jogo...  Gráficos 2D/3D  Jogo de plataforma - Colisão
Anterior Anterior
 
Próximo Próximo
Nova Entrada 4/3/2009 22:50
  Dobrowolski
13 tópicos
10th Level Poster


Jogo de plataforma - Colisão 
Senhores, boa noite.

Em complemento às dúvidas do colega sobre scrolling, gostaria de uma opinião a respeito do tratamento de colisão entre os personagens e o terreno de um jogo se plataforma estilo Mario, Sonic, Castlevania, etc.

Imaginemos o seguinte cenário:
       Carrego toda a tela com todos os objetos de uma vez e conforme o jogador pressionar para a direita, todos os objetos se movem para a esquerda, e, junto com isso, trato a colisão dos personagens com todos os objetos da tela.

A pergunta é: Existe algum jeito menos "pesado" pro computador?

Tipo, em uma fase grande, é um foreach pras listas de objetos inteiras atualizando suas posições E verificando colisão....

Grato pela atenção...

Marcos Dobrowolski
(decepcionado com o 3D no XNA)

Marcos Dobrowolski
 
Nova Entrada 4/3/2009 23:28
  zora
29 tópicos
9th Level Poster


Re: Jogo de plataforma - Colisão 
Lógico que existem estratégias que aumentam a performance do teu Game. Certamente quanto a física existe várias técnicas, incluindo aquelas de BroadPhase para detecção somente do nescessário( bem como implementação de uma Quadtree p/ 2d ou Octree p/ 3d ), e não simplesmente uma lista com os objetos hehe, assim levaria muito tempo mesmo. Neste site mesmo tem um artigo sobre isso. Vi alguns na Ziggyware Tbm.

Por sinal, porque decepcionado com o 3d no xna? =p
 
Nova Entrada 5/3/2009 0:33
  lucianoJose
195 tópicos
Iniciante


Re: Jogo de plataforma - Colisão 
 Dobrowolski escreveu
Senhores, boa noite.

Em complemento às dúvidas do colega sobre scrolling, gostaria de uma opinião a respeito do tratamento de colisão entre os personagens e o terreno de um jogo se plataforma estilo Mario, Sonic, Castlevania, etc.

Imaginemos o seguinte cenário:
       Carrego toda a tela com todos os objetos de uma vez e conforme o jogador pressionar para a direita, todos os objetos se movem para a esquerda, e, junto com isso, trato a colisão dos personagens com todos os objetos da tela.

A pergunta é: Existe algum jeito menos "pesado" pro computador?

Tipo, em uma fase grande, é um foreach pras listas de objetos inteiras atualizando suas posições E verificando colisão....

Grato pela atenção...

Marcos Dobrowolski
(decepcionado com o 3D no XNA)


Sim, existem formas melhores. Nesse caso, não precisa ficar atualizando as posições dos objetos, isso deve ser evitado. Entretanto, a verificação de colisão é inevitável.

Uma forma interessante de se fazer isso que você comentou:

Quando você move a camera, não precisa no seu laço foreach, mudar a posição de todos os objetos para o sentido contrário ao movimento. 

Uma solução mais interessante é você renderizar todos os objetos em relação ao seu Cenário. Daí então, basta ir movendo a câmera de seu jogo, que ao você mover a sua camera para direita, por exemplo, todos os objetos vão para a esquerda normalmente sem ter modificado a posição de nenhum objeto do jogo(apenas a posição local da camera). 

O que pode ajudar a implementar isso é saber como criar uma camera 2D tendo que ter em mente como diferenciar coordenada local do objeto de coordenada relativa ao mundo, além de escolher a sobrecarga de método SpriteBatch.Draw apropriada.

@lucianoJoseBr My Blog: http://lucjose.wordpress.com
 
Nova Entrada 5/3/2009 17:43
  Dobrowolski
13 tópicos
10th Level Poster


Re: Jogo de plataforma - Colisão 
 zora escreveu
Lógico que existem estratégias que aumentam a performance do teu Game. Certamente quanto a física existe várias técnicas, incluindo aquelas de BroadPhase para detecção somente do nescessário( bem como implementação de uma Quadtree p/ 2d ou Octree p/ 3d ), e não simplesmente uma lista com os objetos hehe, assim levaria muito tempo mesmo. Neste site mesmo tem um artigo sobre isso. Vi alguns na Ziggyware Tbm.

Por sinal, porque decepcionado com o 3d no xna? =p



Opa opa!! Agora fiquei feliz . Não sabia que dava pra fazer uma câmera 2D. Preciso descobrir como se faz isso.....
Isso deve resolver o meu problema. Quanto à colisão, estava pensando em criar grandes blocos de colisão invisíveis, para que o teste não tenha de ocorrer com cada objeto do terreno.

Por exemplo, tenho uma área plana com 5 objetos de terreno (spritezinho com textura de grama, sei lá...). Crio nesse lugar, um grande bloco que compreenda todos os 5 objetos. Ao invés de testar colisão com 5 caras, testarei com 1 só.

Agora, meu caro amigo aquático pálido...
Achei muito legal a idéia de detetar somente o necessário mas....           o que diabos são BroadPhase e QuadTree ou OctTree???????


Muito obrigado!!!


Ah! Quanto à história do 3D, é o seguinte.... Por mais que eu goste de programação, ficar programando shader pra fazer uma bendita lampadinha me deixou meio frustrado.....   Vlws!!!

Marcos Dobrowolski
 
Nova Entrada 5/3/2009 23:22
  zora
29 tópicos
9th Level Poster


Re: Jogo de plataforma - Colisão 
Modificado Por zora  em 5/3/2009 22:28:09)

Opa!

Hehe só uma observação quanto a câmera 2d, ela é simplesmente uma abstração lógica, pois não existe  implementado uma camera 2d  pelo XNA. Porém tem um artigo simulando ela:

http://creators.xna.com/en-US/sample/tiledsprites


Quanto à física, BroadPhase Collision Detection é um método de reduzir várias checagens de colisões entre os objetos do teu jogo, a teoria dela e uma implementação bem nesse artigo aqui :

http://www.ziggyware.com/readarticle.php?article_id=128

Quanto às QuadTrees( uma implementação de árvore com 4 filhos cada nodo ), é um metodo de comparação entre objetos, que também elimina várias checagens. Porém ela serve somente para 2d , em função de estar limitada aos 2 planos, conforme nesse artigo :

http://www.sharpgames.net/Artigos/Artigo/tabid/58/selectmoduleid/376/ArticleID/1603/reftab/54/Default.aspx

Já as octrees servem para 3 planos, nunca implementei mas se não me engano a JiglibX tem um dos sistemas de detecção de física que utiliza ela, o Grid.


Ah mas shaders são tão legais! poder mover todos os vertex da cena e brincar com os pixels, muito legais : ) depois que eu dei uma pesquisada nos códigos pra fazer cada efeito... parallax mapping, etc... hehehe...

 
Anterior Anterior
 
Próximo Próximo
  Forum  Criação de Jogo...  Gráficos 2D/3D  Jogo de plataforma - Colisão
Logos do XBox 360, XNA e Games For Windows
Copyright 2006-2012 por SharpgamesPolítica de Privacidade  |  Termos de Uso