Опитвам се да дам на главния си герой персонализиран клас, така че да мога да дефинирам всичките му поведения в определения клас.
Вече направих нещо подобно, като използвах протоколи:
protocol CustomNodeEvents{
func didMoveToScene()
}
Този протокол е във файла GameScene, преди да започне класът. След това извиквам функцията по този начин в класа GameScene:
override func didMove(to view: SKView) {
if let customnode = player as? CustomNodeEvents{
customnode.didMoveToScene()
}
}
Когато играчът се определя като:
player = self.childNode(withName: "//player") as! SKSpriteNode
също във функцията didMove(to view: SKView).
Сега създадох друг файл (моят персонализиран клас файл) и пиша:
import SpriteKit
class Custom: SKSpriteNode, CustomNodeEvents{
func didMoveToScene() {
print("It Worked")
}
}
Нямам никакви грешки, но всъщност не изпълнява блока от код в моя персонализиран клас (във файла GameScene.sks вече прикачих класа към плейъра).
Въпросът ми е как мога да го накарам да работи? И вторият въпрос е, това ли е най-добрият начин да дефинирате персонализиран клас и да го "свържете" с други класове?
РЕДАКТИРАНЕ:
class GameScene: SKScene {
var player: SKSpriteNode!
override func didMove(to view: SKView) {
player = self.childNode(withName: "//player") as! SKSpriteNode
if let customnode = player as? CustomNodeEvents{
customnode.didMoveToScene()
}
player = self.childNode(withName: "//player") as! Custom
. Ако това не успее, тогава знаем къде е проблемът - person Knight0fDragon   schedule 19.10.2016if let customnode = player as? CustomNodeEvents{ customnode.didMoveToScene() } } else { print("Error casting customnode")}
Можете също така да използватеassert
, така че да се срине на правилния ред - person Knight0fDragon   schedule 19.10.2016didMove( to view)
- person Knight0fDragon   schedule 19.10.2016