Как я могу настроить инициализацию класса типа SKSpriteNode? - PullRequest
0 голосов
/ 25 марта 2020

Я создаю небольшую игру, в которой мне нужно случайным образом порождать несколько перков, каждый из которых должен иметь разные настройки, но все они имеют одинаковые переменные, но у меня проблемы с инициализаторами. Вот код класса 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'

Итак, я спрашиваю: как мне изменить код соответствующим образом? Заранее спасибо!

...