[MÚSICA] E
aí pessoal, tudo bem?
Nessa aula vamos ver como adicionar efeitos de partículas no jogo.
Vamos adicionar rasto de estrelinhas por onde o jogador passar e
efeito de explosão quando o jogador colidir com o inimigo.
O XCode já disponibiliza alguns efeitos de efeito de partículas.
Clique com o botão direito na pasta do seu projeto e selecione New File.
Em iOS, Resource, selecione SpriteKit Particle File e clique em Next.
Escolha o template Magic e salve com o nome FairyDust.
O XCode então mostra editor de partículas.
Ao lado direito você pode mudar todas as configurações que desejar.
Para efeitos de partículas você pode configurar a textura da partícula,
a velocidade, posição e ângulo de nascimento,
o tempo de vida de cada partícula, transparência, cor,
tamanho e pode configurar a aleatoriedade e cada uma dessas propriedades.
Experimente mudar cada uma delas para ver o efeito em tempo real.
Para esse efeito, mude o nome para FairyDust, escolha a textura
Star Particle, que disponibilizamos no artigo ZIP deste módulo,
diminua o tempo de vida das partículas para 0,5,
[SEM ÁUDIO]
mude a amplitude de posição X e Y para 20
e mude a velocidade de escala para 0.
[SEM ÁUDIO] Agora
vá para o editor de cena, clique e arraste esse efeito que acabamos de criar.
Esse arquivo criado serve como referência e todas as modificações que fizermos
nesse efeito importado na cena, não irão modificar o arquivo original.
Posicione o efeito pouco abaixo do jogador e selecione o player
node para ser o pai desse efeito.
Assim quando o player node se movimentar o efeito também se move.
Rode no simulador para ver o que acontece.
Como o nó pai do efeito de partículas é o player node,
as referência de posição do efeito se tornam relativas ao pai, mas não é isso
que queremos, queremos que se forme rasto de particulas por onde o jogador passar.
Para isso mude o target node.
Selecione o SKScene_0 para que agora a referência
de posição do efeito seja a cena ao invés do jogador.
Posicione o efeito no centro do player node.
Vamos mudar a cor da partícula.
Clique no círculo verde com uma seta,
selecione o conta gotas e clique na cor do alienígena.
Rode no simulador para ver o resultado.
[SEM ÁUDIO] Agora
o efeito cria rasto de partículas por onde o jogador passa.
Vamos agora criar o efeito de explosão.
Crie novo arquivo de partículas e escolha template Spark.
Dê o nome de Explosion.
[SEM ÁUDIO] Vamos
modificar pouco esse efeito para parecer como uma explosão.
Você pode perceber que esse efeito fica emitindo partículas infinitamente.
Mude o número máximo de partículas para 500.
Isso significa que apesar da taxa de nascimento de partículas ser 2000, apenas
500 partículas serão geradas e então o efeito pára de emitir novas partículas.
Se o número for 0 significa que infinitas partículas podem ser criadas.
Mude o position range para 5, tanto no X como no Y.
[SEM ÁUDIO] Mude
o Blend Mode para Alpha.
[SEM ÁUDIO] No
código crie uma função chamada
EmitExplosion que cria uma constante SKEmitterNode chamada ExplosionNode
passando como argumento o nome do arquivo de partículas Explosion.sks.
Em seguida a propriedade particlePosition de explosionNode é definida com
a posição atual do playerNode.
Então o explosionNode é adicionado na cena pela linha self.addChild(explosionNode).
E por último não podemos esquecer de remover explosionNode da cena pois
apesar de não continuar emitindo partículas ele continua na cena e
ocupa espaço na memória.
A função runAction também pode ser usada com o argumento
completion que define bloco de código a ser executado quando a ação se completar.
Aqui usamos uma função waitForDuration que recebe a duração
em segundos de quanto tempo deve ser esperado.
Essa linha executa uma ação que espera 1 segundo e então remove o
explosionNode da cena.
Execute a função EmitExplosion na função GameOver Rode
no simulador para ver o resultado.
[SEM ÁUDIO] A explosão
está funcionando conforme o esperado mas ainda temos que corrigir problema.
Você pode perceber que quando o jogador morre o efeito de partículas continua lá.
Vamos para o código corrigir isso.
Crie uma variável SKEmitterNode chamada FairyDustNode.
Como o efeito chamado FairyDust que queremos procurar
é filho do playerNode, temos que usar a função childNodeWithName em playerNode.
Certifique-se que esta linha fique depois da variável playerNode ser preenchida.
Na função GameOver mude o número máximo de partículas a serem emitidas para
1 através da propriedade numParticlesToEmit.
Assim no momento que essa linha for executada o emissor irá gerar uma
partícula e vai parar de emitir outras sem que o emissor seja destruído.
Note que fazer hidden igual a true não funciona no caso.
Em RestartGame volte numParticlesToEmit para 0,
para que o emissor volte a gerar partículas infinitamente.
Rode no simulador.
Com isso terminamos a aula de partículas.
Na próxima aula veremos como lidar com diferentes tamanhos de tela.
Até lá!