在单独的 SKSpriteNode 子类中定义 SKSpriteNode 的 physicsBody - Swift2
Define physicsBody of a SKSpriteNode in a separate SKSpriteNode subclass - Swift2
我有一个class叫Bird,就是一个SKSpriteNode。我确实初始化了它,但我不知道如何在同一个 class 而不是在 GameScene class.
中设置它的 physicsBody 和其他属性
鸟class:
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中设置Bird属性的函数:
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
}
我尝试通过在 Bird class 中定义它来设置它的物理体,使用 self.physicsBody = ...,但这给了我一个错误,以及在init 函数,所以我没有在代码中包含它。
我想单独做的原因 class 是因为我想学习如何编写组织良好的代码,这样代码会更具可读性和自解释性。但是我在Swift和编程方面还是个初学者,所以经验和知识的缺乏给我带来了一些麻烦。
欢迎任何帮助或建议!
您是否尝试在调用 super.init()
后设置这些属性?
由于您要设置的属性来自超类,因此只能在此调用后设置,例如:
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))
self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2)
}
我不知道你在 init()
中首先做了什么,但也许是这样。
我有一个class叫Bird,就是一个SKSpriteNode。我确实初始化了它,但我不知道如何在同一个 class 而不是在 GameScene class.
中设置它的 physicsBody 和其他属性鸟class:
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中设置Bird属性的函数:
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
}
我尝试通过在 Bird class 中定义它来设置它的物理体,使用 self.physicsBody = ...,但这给了我一个错误,以及在init 函数,所以我没有在代码中包含它。
我想单独做的原因 class 是因为我想学习如何编写组织良好的代码,这样代码会更具可读性和自解释性。但是我在Swift和编程方面还是个初学者,所以经验和知识的缺乏给我带来了一些麻烦。
欢迎任何帮助或建议!
您是否尝试在调用 super.init()
后设置这些属性?
由于您要设置的属性来自超类,因此只能在此调用后设置,例如:
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))
self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2)
}
我不知道你在 init()
中首先做了什么,但也许是这样。