У меня есть класс под названием Bird, то есть SKSpriteNode. У меня есть инициализация, но я не могу понять, как установить физический метод и другие его свойства в том же классе, а не в классе GameScene.Определить физикуBody для SKSpriteNode в отдельном подклассе SKSpriteNode - Swift2
класс Bird:
import SpriteKit
class Bird: SKSpriteNode {
init() {
let texture = SKTexture(imageNamed: "birdy")
let size = texture.size()
super.init(texture: texture, color: UIColor.clearColor(), size: CGSizeMake(size.width/4, size.height/4))
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Функция для установки свойств птицы в GameScene:
var birdSprite: Bird!
func setupBird() {
birdSprite = Bird()
birdSprite.position = CGPointMake(size.width*0.5, size.height*0.2)
birdSprite.zPosition = Layer.Bird.rawValue
self.addChild(birdSprite)
birdSprite.physicsBody = SKPhysicsBody(circleOfRadius: birdSprite.size.width/2)
birdSprite.physicsBody?.categoryBitMask = PhysicsCategory.Bird
birdSprite.physicsBody?.collisionBitMask = PhysicsCategory.None
birdSprite.physicsBody?.contactTestBitMask = PhysicsCategory.Desk
birdSprite.physicsBody?.allowsRotation = false
birdSprite.physicsBody?.restitution = 0
birdSprite.physicsBody?.usesPreciseCollisionDetection = true
}
Я попытался установить его физику тела, определив его в классе птиц, с self.physicsBody = ... но это дало мне ошибку, а также установило ее так же внутри функции init, поэтому я не включил ее здесь в код.
Причина, по которой я хочу сделать это в отдельном классе, заключается в том, что я хотел бы научиться писать хорошо организованный код, чтобы код был более читабельным и самоочевидным. Но я более или менее новичок в Swift и программирование в целом, поэтому отсутствие опыта и знаний дает мне некоторые проблемы.
Любая помощь или предложение приветствуются!
Это работает! Как вы предположили, он не работал, потому что я настраивал его перед инициализацией, спасибо! – Larisa