Entendendo o Life Cycle do SpriteKit
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