Я делаю игру, используя спрайткит.Я использую джойстик в своей игре, который объявлен в отдельном классе SKNode, называемом «джойстик».
В этом классе я добавляю UIGesturerecongiser к представлению из класса.В методе конструктора одним из параметров является SKView, который передается со сцены игры.
Метод конструктора в классе джойстиков:
init(colour: UIColor, position: CGPoint, skView: SKView) {
//constructor method
self.colour = colour;
self.parentposition = position;
self.view = skView;
super.init();
//setup properties
//user interaction is needed to allow touches to be detected
self.isUserInteractionEnabled = true;
//setup
setup();
}
В игровой сцене я инициализирую класс следующим образом:
class GameScene: SKScene {
func setupJoyStick() {
let joystick1 = Joystick(colour: UIColor.red, position: CGPoint(x: screenwidth / 3, y: screenwidth / 10 * 1.5), skView: self.view!)
self.addChild(joystick1)
}
}
Ошибка:
Когда я запускаю свое приложение, я получаю сообщение об ошибке, потому что «self.view» возвращает ноль, а также потому, что его принудительно разворачивают, это приводит к фатальной ошибке.
Где определяется вид:
if let scene = GKScene(fileNamed: "GameScene") {
// Get the SKScene from the loaded GKScene
if let sceneNode = scene.rootNode as! GameScene? {
// Copy gameplay related content over to the scene
sceneNode.entities = scene.entities
sceneNode.graphs = scene.graphs
// Set the scale mode to scale to fit the window
sceneNode.scaleMode = .aspectFill
sceneNode.size = view.bounds.size
// Present the scene
if let view = self.view as! SKView? {
view.presentScene(sceneNode)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
}
Дополнительная информация:
Я использую:
- Xcode 9.2
- Swift 4
- Sprite Kit
Я тестирую его на:
- Iphone 6s
- Последняя версия IOS (не бета), последняя публичная версия.
Может кто-нибудь объяснить, почему это происходит и как решить эту проблему.
Заранее спасибо, любыебыла бы признательна за помощь.