Я создаю небольшую игру, в которой мне нужно случайным образом порождать несколько перков, каждый из которых должен иметь разные настройки, но все они имеют одинаковые переменные, но у меня проблемы с инициализаторами. Вот код класса Perk:
import Foundation
import SpriteKit
public class Perk: SKSpriteNode {
var perkTexture: SKTexture
var perkType: Int
var perkEffect: Bool
var perkSize: CGSize
init(perkTexture: SKTexture, perkType: Int, perkEffect: Bool, perkSize: CGSize) {
self.perkTexture = perkTexture
self.perkType = perkType
self.perkEffect = perkEffect
self.perkSize = perkSize
super.init(texture: perkTexture, color: .clear, size: perkSize)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
public let defensePerkPlus = Perk(perkTexture: SKTexture(imageNamed: "Shield"), perkType: 1, perkEffect: true, perkSize: CGSize(width: 100, height: 100))
public let attackPerkPlus = Perk(perkTexture: SKTexture(imageNamed: "Ward"), perkType: 2, perkEffect: true, perkSize: CGSize(width: 100, height: 100))
public let manaPerkPlus = Perk(perkTexture: SKTexture(imageNamed: "Potion"), perkType: 3, perkEffect: true, perkSize: CGSize(width: 100, height: 100))
public let perks = [defensePerkPlus, attackPerkPlus, manaPerkPlus]
Я создаю экземпляры, заполняю вектор и в файле GameScene.swift пытаюсь взять случайный элемент этого вектора:
override func update(_ currentTime: TimeInterval) {
if updateTime == 0 {
updateTime = currentTime
}
if updateTime2 == 0 {
updateTime2 = currentTime
}
if currentTime - updateTime2 > 10 {
//do something every 30 seconds
updateTime2 = currentTime
if let randomPerk = perks.randomElement()?.copy() as? SKSpriteNode {
randomPerk.position = CGPoint(x: (self.frame.minX), y: CGFloat.random(min: self.frame.minY, max: (self.size.height)))
addChild(randomPerk)
print(randomPerk.position)
}
}
}
Но когда я запускаю код, через 10 секунд, которые я установил, я получаю ошибку:
Fatal error: Use of unimplemented initializer 'init(texture:color:size:)' for class 'EndlessTowerDefence.Perk'
Итак, я спрашиваю: как мне изменить код соответствующим образом? Заранее спасибо!