24 de out. de 2013

Engenharia Física

No motor de física que você vai criar, o Koala terá suas próprias variáveis ​​de movimento que descrevem: a velocidade da corrente (velocidade), aceleração e posição, entre outros. Usando estas variáveis, cada movimento que você aplicar para o Koala seguirá este algoritmo:

  1. É o salto ou mover ação selecionada?
  2. Se assim for, aplicar um salto ou um movimento de força para o Koala.
  3. Aplicam-se também a gravidade para o Koala.
  4. Calcule a velocidade resultante do Koala.
  5. Aplicar esta velocidade resultante do Koala e atualizar a sua posição.
  6. Verifique se há colisão entre o Koala e outros objetos.
  7. Se houver uma colisão, resolvê-lo ou movendo o Koala para trás o suficiente para que a colisão está ocorrendo há mais tempo, ou causando danos aos pobres Koala.
Forças brigando Koalio.
Você vai executar estes passos para cada frame. No mundo do jogo, a gravidade está constantemente empurrando o Koala para baixo e através do solo, mas a etapa de resolução de colisão vai colocá-lo de volta ao topo do solo em cada quadro. Você também pode usar esse recurso para determinar se o Koala ainda está tocando o chão, e se não, não permitir a ação salto se o Koala é já em meados de salto ou tem apenas orientado a borda.
Passos 1-5 ocorrerá exclusivamente no objeto do Koala. Toda a informação necessária está contida ali, e não faz sentido deixar o Koala atualizar suas próprias variáveis.
No entanto, quando você chegar ao sexto passo - detecção de colisão - você precisa ter todas as características de nível em consideração, tais como paredes, pisos, inimigos e outros perigos. A etapa de detecção de colisão será realizada em cada quadro pelo GameLevelLayer - lembre-se, essa é a subclasse CCLayer que vai fazer um monte de trabalho do motor de física.
Se você permitiu que a classe do Koala para atualizar sua própria posição, ele iria mover-se em uma colisão com um bloco de parede ou chão, eo GameLevelLayer então movê-lo de volta, repetidamente - o que faria parecer que ele estava vibrando. (Teve um pouco de muito café, Koalio?)
Assim, você não vai permitir que o Koala para atualizar seu próprio estado. Em vez disso, o Koala terão uma nova variável, desiredPosition, que ele irá atualizar. O GameLevelLayer irá verificar se este desiredPosition é válido por detectar e resolver quaisquer colisões, e então o GameLevelLayer irá atualizar a posição do Koala.
Entendeu? Vamos testá-lo e ver o que parece em código!