Entendendo o Life Cycle do SpriteKit

Rebecca Mello
Apple Developer Academy | Mackenzie
4 min readMay 25, 2022
Photo by Wesson Wang on Unsplash

Sabe aqueles jogos que possuem várias imagens, textos, animações e comportamentos físicos? Então, existe uma biblioteca muito conhecida que permite que esses elementos que vemos na nossa tela ganhem vida e interajam com o usuário, além de fazer uma transição incrível entre as telas. Ela se chama SpriteKit! Vamos conhecer um pouco sobre ela?

O que é o famoso SpriteKit?

SpriteKit é o framework de propósito geral mais usado para jogos e experimentos visuais em formato 2D.

Toda mágica visual que ele faz é possível graças a sua renderização de alto nível, oferecendo uma interface bem simples para facilitar a criação dos games e aplicativos com uso intensivo de gráficos.

Entendendo sua estrutura

Todos os conteúdos ativos do SpriteKit são organizados em um objeto de classe SKScene, que vai representar a sua cena. Essa cena é o nó raiz de uma árvore com outros nós de SpriteKit, sendo eles objetos da classe SKNode.

Funções

Existem algumas funções já prontas pelo framework que são muito usadas para facilitar o desenvolvimento do seu jogo:

SceneDidLoad

É uma função chamada logo após a inicialização da cena, onde o desenvolvedor pode fazer uma configuração personalizada dela.

Sua declaração:

override func sceneDidLoad()

Por exemplo, no código abaixo, uma linha já feita na tela é removida dela quando o usuário pressiona o botão:

public override func sceneDidLoad() {
super.sceneDidLoad()
button.action = { [weak self] in
guard let self = self else {return}
self.removeChildren(in: self.line)
self.line.removeAll(keepingCapacity: false)
self.path = CGMutablePath()
for star in self.cruzSul.stars{
star.getShape().physicsBody?.isDynamic = true
star.getShape().fillColor = .white
star.node.removeAllActions()
star.goBackToOriginalSize()
}
self.count = 0

}
}

Aqui, não é possível criar novas views por não conhecer a view principal ainda, mas pode-se acrescentar novos nós (nodes).

didChangeSize

Função que recebe como parâmetro o tamanho anterior da cena, em pontos, e é usada para ajustar as posições dos nós nela. Ou seja, sabe quando você muda a tela do seu celular de vertical para horizontal, e mesmo assim, os elementos não ficam destorcidos ou fora da tela? Então, é na didChangeSize que fazemos as alterações para que isso aconteça.

Sua declaração:

override func didChangeSize(_ oldSize: CGSize)

willMove

Função em que é possível implementar qualquer comportamento personalizado para a sua cena para quando ela está prestes a ser removida da view.

Sua declaração:

override func willMove(from view: SKView)

didMove

Função usada para quando quiser fazer algum comportamento específico para quando a sua cena está prestes a ser apresentada por uma view.

Sua declaração:

override func didMove(to view: SKView)

draw

Método usado para desenhar os elementos na tela.

Sua declaração:

func draw()

Por exemplo, é necessário usar esse comando addChild para desenhar o conteúdo da variável “grama” na tela.

func draw(){
self.removeAllChildren()
self.addChild(grama)
}

didBegin

Chamado quando dois corpos físicos se encostam, ou seja, no primeiro contato que eles têm um com o outro.

Sua declaração:

optional func didBegin(_ contact: SKPhysicsContact)

didEnd

Em contraposição da anterior, é uma função chamada para quando o contato entre dois corpos físicos acaba.

Sua declaração:

optional func didEnd(_ contact: SKPhysicsContact)

As seguintes funções tratam-se daquelas que são chamadas quando o jogo ou aplicativo requer um movimento de toque do usuário. Elas são da biblioteca de UIKit, mas usadas com o SpriteKit.

touchesBegan

Esse método é chamado quando ocorre o primeiro toque na tela.

Sua declaração:

override func touchesBegan(with event: NSEvent)

touchesEnded

Método chamado quando o usuário para de tocar na tela, não havendo mais contato com ela.

Sua declaração:

override func touchesEnded: Set<UITouch>, with event: UIEvent?)

touchesMoved

É acionado indicando quando um ou mais toques associados a um evento são alterados, como uma mudança a localização ou força deles. Por exemplo, quando o jogo requer que o usuário desenhe uma linha na tela, essa função é chamada ao deslizar o dedo nela.

Sua declaração:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)

touchesCancelled

Essa função indica que um evento do sistema cancela uma sequência de toque, sendo que essa interrupção pode ser qualquer coisa que faça com que o aplicativo fique inativo ou com que a view seja removida da janela. Nisso, portanto, qualquer estado associado ao toque é removido.

Sua declaração:

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?)

Assim como essas funções apresentadas, há inúmeras outras que também podem ser estudadas e que, sem dúvidas, vão te ajudar muito ao desenvolver seu aplicativo. Sendo assim, podemos ver que o SpriteKit é de fato um framework maravilhoso e super rico de funcionalidades, e que faz valer muito a pena investir seu estudo e esforço nele!

Nada melhor do que você sonhar com um novo jogo ou uma ideia de aplicativo e poder ver ele funcionando do jeitinho que queria, certo? Então, seguindo fundo a esses estudos podemos conseguir isso! Boa sorte, devs!

Sistemas que suportam SpriteKit

  • iOS
  • macOS
  • tvOS
  • watchOS

Referências:

Swift Playgrounds — SpriteKit

Apple Developer Documentation

Introduzindo o SpritKit

--

--

Rebecca Mello
Apple Developer Academy | Mackenzie

Desenvolvedora iOS, formada em Ciência da Computação e, atualmente, fazendo pós graduação em Novas Tecnologias, Transformação Digital e Agilidade.