Nintendo Blast Nº12

Page 45

Anterior GAMEDEV

E, finalmente, no método Draw vamos incluir o código para desenhar o novo sprite na tela do nosso jogo: spriteBatch.Begin(SpriteBlendMode.AlphaBlend); mySprite1.Draw(spriteBatch); mySprite2.Draw(spriteBatch); spriteBatch.End(); Nesse momento, se você executar o seu jogo, perceberá que os dois sprites estão se movimentado, mas ainda não estão colidindo. Nós resolveremos isso adicionando uma chamada ao método detectaColisao no método Update e alterando a velocidade entre os sprites, conforme segue abaixo: if (mySprite1.detectaColisao(mySprite2)) { //Quando os sprites colidirem, suas velocidades mudarão entre si Vector2 tempVelocidade = mySprite1.velocidade; mySprite1.velocidade = mySprite2.velocidade; mySprite2.velocidade = tempVelocidade; } Agora sim, se você executar o seu jogo, irá perceber que os sprites estão colidindo um com o outro, além de colidirem com as bordas da janela. Bacana, não? Contudo, apesar do sistema de detecção de colisões estar utilizando o algoritmo do bouncing box, depois de alguns testes você perceberá um problema. Se os sprites colidirem diagonalmente, eles irão colidir antes de atingirem um ao outro de verdade. Isso está ocorrendo justamente por utilizarmos caixas para representar a forma geométrica das esferas. Quando queremos testar colisões entre esferas, teremos que verificar se a distância entre os centros delas são menores que a soma dos seus raios. Em caso positivo, então uma colisão ocorreu. Essa é a forma mais eficiente de detectar colisões entre duas esferas. Para darmos suporte a esse sistema, na classe classSprite vamos criar duas novas propriedades, uma chamada centro e outra raio, que serão calculadas de acordo com outra propriedade do Sprite.

public Vector2 centro { get { return posicao + (tamanho / 2);} } //O centro do sprite public float raio { get { return tamanho.X / 2; } } //O raio do sprite

45

Próxima


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.