terça-feira, 26 de junho de 2018

MAMI - Projeto(Parte 2)

Eu não consegui fazer o vídeo, mas gostaria de registrar aqui o que eu  fiz da segunda parte do projeto pelo menos para dar uma satisfação.

Eu dei um resumo sobre as informações gerais do projeto na parte 1

Link da parte 1

Depois de ter feito as 3 mecânicas da parte 1, eu comecei a trabalhar na colisão com os escudos.


Essa parte a princípio eu pensei que ia ser complicada, mas eu dei uma pesquisada na internet e descobri uma forma de testar a colisão, a ideia é bem simples:


Uma linha significa a distância entre 2 pontos, que eu representei no gif acima como uma linha azul;

As linhas vermelhas são as distâncias entre a partícula e cada um dos pontos da linha azul;

O momento onde há a colisão entre a partícula e a linha azul é quando as duas linhas vermelhas se assemelham à linha azul, ou seja, quando:

(distancia da partícula para o ponto 1)+(distancia da partícula para o ponto 2)-(distância entre o ponto 1 e o ponto 2) = 0;

Como tem sempre algum número muito pequeno de erro e também por conta do deslocamento da partícula, em vez de deixar "= 0" eu deixo "< (velocidade da partícula)".

Depois disso eu resolvi fazer orientado a objetos e resolvi usar ArrayList, porque ficava muito mais fácil adicionar e remover elementos, como as camadas de escudos com todos os escudos apagados ou os tiros que saem da tela;

E o movimento dos mísseis é bem parecido com o da nave, eles tem um ângulo e deslocam esse ângulo tentando achar.

Eu fiz uma pequena modificação no jogo pra mostrar setas que simbolizem esse ângulo neste vídeo.

Também tem a colisão entre os tiros do jogador e os mísseis do chefe, mas aí foi só checar se a distância entre ambos era menor ou igual à soma dos raios.

Vou deixar o link de download do jogo abaixo


Link de download

quarta-feira, 13 de junho de 2018

MAMI - Aula #10


A tarefa não é muito complexa, mas ela mostra como é interessante entender alguns conceitos físicos na hora de pensar em como resolver esse tipo de problema.

  

A princípio você pode ficar perdido tentando pensar quanto a caixa deve se deslocar e como calcular isso, mas a grande questão aqui na verdade é o tempo.

Vamos usar uma física bem básica, a fórmula da velocidade diz que:

 velocidade = descolamento/tempo

- Nós queremos definir a velocidade;
- Nós sabemos que o deslocamento é a distância entre o ponto atual e o alvo;
- Só falta descobrir o tempo!

Obs.: O tempo aqui é a unidade de frame do programa.

Arrumando a fórmula descrita mais acima, temos:

tempo = deslocamento/velocidade

A ideia é simplesmente pegar a nosso deslocamento e a velocidade e usá-los para calcular o tempo:


Essa função é chamada apenas no mouseReleased(); já a função que atualizaria a posição e que seria chamada no draw() seria assim:



Ela é chamada no draw() apenas quando o tempo é diferente de 0, e tem uma correção para parar a caixa no alvo quando o tempo for menor do que 0.

Perceba que após o tempo ter sido calculado e continuar sendo recalculado, é possível calcular a velocidade apenas usando a fórmula v = d/t, nós não temos uma variável guardando a velocidade, mas a própria matemática se encarrega de fazer isso.

O resultado é este: