инициализировать var с помощью swift с помощью SpriteKit?

#swift #sprite-kit

#swift #набор спрайтов

Вопрос:

Как правильно выполнить инициализацию с помощью swift с помощью SpriteKit?

Это компилируется, но я получаю сообщение об ошибке, как только симулятор начинает работать. «swift_reportUnimplementedInitializer»

 import SpriteKit

class GameScene: SKScene {

    var paddlePositionUpdate:CGPoint

    init(paddlePositionUpdate:CGPoint){
    self.paddlePositionUpdate = CGPoint.zeroPoint
    super.init()
}
}
  

Комментарии:

1. Я выяснил, что я мог бы использовать для хранения значения. Я только что создал словарь. Не очень красиво, но это работает!!! Спасибо, Рошан!!! настройки игры в var:Dictionary = [«paddlePositionUpdate»:CGPoint.zeroPoint]

Ответ №1:

Назначенный инициализатор для SKScene — это init(size) где size — размер вашей сцены. Вы пытались использовать init() то, чего не существует.

Вы можете увидеть точную сигнатуру метода, если нажмете на SKScene

РЕДАКТИРОВАТЬ: попробуйте что-то вроде

 class GameScene: SKScene {

    var paddlePositionUpdate: CGPoint

    init(size: CGSize, paddlePosition: CGPoint = CGPoint.zeroPoint){
        paddlePositionUpdate = paddlePosition
        super.init(size)
    }
}
  

Сцена должна быть инициализирована размером…

Комментарии:

1. возможно, я иду по этому неправильному пути. Все, что мне нужно, это использовать переменную point в качестве держателя места для перемещения объекта paddler.

2. breakoutIphone /GameScene.swift: 11: 11: неустранимая ошибка: использование нереализованного класса инициализатора GameScene: SKScene { var paddlePositionUpdate: CGPoint init(размер: CGSize, расположение весла: CGPoint = CGPoint.zeroPoint){ paddlePositionUpdate = paddlePosition super.init(размер:self.size) } }

3. Я думаю, что я получал ошибку. Не все работает. Спасибо за вашу помощь.

4. @masters3d Я не понимаю, почему вы используете ‘super.init(size:self.size)’ в своих комментариях. Разве это не должно быть ‘super.init(size: размер)’ ?

Ответ №2:

У меня была похожая проблема при замене сцены на другую, используя

 let gameScene = GameScene(size: self.size)
self.view.presentScene(gameScene)
  

И я продолжал получать 2 ошибки об инициализации:

 // Error #1
'GameScene' is not constructible with '(size: @lvalue CGSize)'
// Error #2
Class 'GameScene' has no initializers
  

Чтобы исправить ошибку # 1, просто замените GameScene(size: self.size) на GameScene.sceneWithSize(self.size)

Ошибка # 2, похоже, зависит от того, как инициализируется свойство. Например, если бы я написал:

 class GameScene: SKScene {

var test: CGPoint
// ...
}
  

Ошибка # 2 все еще была там. Но если я заменил var test: CGPoint на var test: CGPoint! , var test = CGPoint(0,0) или любые другие строки, которые могут давать test определенное значение, ошибка # 2 исчезла. Я искал в руководстве, но нашел множество классов, использующих такие строки, как var test: CGPoint . И здесь я запутался.

Возможно, это распространенная проблема для новичков Swift, и я надеюсь, что мое временное решение поможет.