[MÚSICA] E
aí pessoal, tudo bem?
Nessa aula vamos ver como adicionar objetos com Física.
Crie novo projeto com template de game com as configurações Swift,
SpriteKit e Universal.
[SEM ÁUDIO] Remova a orientação Portrait pois vamos fazer jogo em modo Paisagem.
[SEM ÁUDIO] No
código remova as linhas de exemplo deste template.
Faça o download do
arquivo ZIP deste módulo e importe as imagens da pasta PhysicsPack.
[SEM ÁUDIO] No
editor de cena mude o tamanho da cena para 1136x640.
[SEM ÁUDIO] Adicione
sprite que será o chão do nosso jogo.
Selecione a textura Grass.
[SEM ÁUDIO] Na
sessão Physics Definition,
Body Type define o formato do objeto com física.
Pode ser Bounding rectangle, que considera formato retangular do
tamanho do sprite, Bounding Circle, que considera formato
circular e Alpha mask que considera a parte não transparente da imagem.
O ideal é sempre utilizar o formato mais simples e não abusar do Alpha mask,
pois ele requer mais processamento.
Para o chão selecione Bounding rectangle, desselecione Allows rotation
para que o chão não rotacione quando algum objeto colidir e selecione Pinned,
indicando que esse objeto deve ficar fixo em sua posição.
Adicione novo Color Sprite, modifique
o nome para Ball e selecione a textura alienYellow_round.
Para Body Type selecione Bounding Circle.
Duplique esse sprite,
selecione a textura elementWood001
e renomeie para Ramp.
e para Body Type selecione Alpha mask.
Desselecione Allows rotation e selecione Pinned.
[SEM ÁUDIO]
Duplique esse sprite,
rotacione e posicione do outro lado da cena.
[SEM ÁUDIO] Posicione
a bola em cima de uma das rampas e rode no simulador para ver o resultado.
[SEM ÁUDIO]
[SEM ÁUDIO] Vamos agora adicionar interatividade
com a bola, permitindo que o usuário possa arrastá-la para outra posição.
Em GameScene.swift crie uma variável SKSpriteNode chamada ballNode,
uma boleana holdingObject com o valor false e CGPoint chamado touchLocation.
Na função didMoveToView procure o nó com o nome Ball e atribua a variável ballNode.
Em touchsBegan pegue o primeiro toque na tela,
a posição desse toque e verifique se foi tocado em cima de ballNode.
Se essa condição for verdadeira, atualize a variável
holdingObject para true, touchLocation com o valor de location,
que é a posição do toque e remova a ação da gravidade através da linha
ballNode.physicsBody?.affectedByGravity igual a false.
Zere as velocidades linear e angular.
Na função touchesMoved,
que é chamada quando algum toque muda de posição, verifique se o objeto
está sendo segurado e atualize a variável touchLocation com a posição do toque.
Na função touchesEnded que é chamada quando algum toque termina,
verifique se o objeto está sendo segurado.
Caso seja verdadeiro atualize holdingObject para false e acione
novamente o efeito da gravidade na bola através da linha
ballNode.physicsBody?.affectedByGravity igual a true.
Por fim na função update verifique se o usuário está segurando a bola pela
variável holdingObject.
Se for verdadeiro atualize a posição de ballNode com o valor de touchLocation.
Adicione outros objetos com física na cena,
por exemplo algumas plataformas de madeira, fixas em suas posições.
[SEM ÁUDIO]
[SEM ÁUDIO] Experimente
deixar uma delas com a opção Allows rotation ativada.
Rode no simulador para ver o resultado.
[SEM ÁUDIO]
[SEM ÁUDIO] Perceba
que quando o objeto está fixo em sua posição e aceita rotação,
seu comportamente é similar a uma hélice.
Nessa aula você viu uma introdução à simulação de física no SpriteKit.
Deixarei no material de apoio link da página developer.apple.com caso você
queira se aprofundar pouco mais nesse assunto.
Na próxima aula veremos como lidar com colisões avançadas.
Até lá!