 | | |
| 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 |
|
|
|  |  | | |
| 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 |
|
|
|  |  | | |
| 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 |
|
|
|  |  | | |
| 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 |
|
|
|  |  | | |
| Re: Jogo de plataforma - Colisão |
|
|
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... |
|
|
|
|  |