Создание подкласса SKShapeNode с помощью Swift

#cocoa-touch #sprite-kit #swift

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

Вопрос:

Я пытаюсь создать подкласс SKShapeNode с помощью Swift. Пока у меня есть что-то вроде этого:

 import UIKit
import SpriteKit

class STGridNode: SKShapeNode {

    init() {
        super.init()
        self.name = "STGridNode"
        self.fillColor = UIColor(red: 0.11, green: 0.82, blue: 0.69, alpha: 1)
    }

}
  

В моем коде я хочу, чтобы so сделал что-то вроде:

 let s = STGridNode(rectOfSize: CGSize(width: 100, height: 100))
  

Итак, мой вопрос — как мне реализовать rectOfSize в инициализаторе для STGridNode ? Я пробовал:

 init(rectOfSize: CGPoint) {
    super.init(rectOfSize: rectOfSize);
}
  

Но это выдает ошибку: «Не удалось найти перегрузку для инициализации, которая принимает предоставленные аргументы»

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

1. Какую ошибку вы получаете при попытке инициализировать свой метод?

2. @drewag, я обновил свой вопрос с немного более подробной информацией. Спасибо 🙂

Ответ №1:

У вас две проблемы с кодом, который вы пробовали:

  1. rectOfSize в SKShapeNode принимает CGSize не CGPoint
  2. rectOfSize in SKShapeNode — это удобный инициализатор, поэтому вы не сможете вызвать его из подкласса. Вам придется самостоятельно вызывать super.init() и реализовывать функциональность rect

Вы можете сделать что-то вроде этого:

 init(rectOfSize: CGSize) {
    super.init()

    var rect = CGRect(origin: CGPointZero, size: rectOfSize)
    self.path = CGPathCreateWithRect(rect, nil)
}
  

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

1. self.path = CGPath(rect: rect, преобразование: ноль)