我在使用 SKNode
-s 作为包含各种 Sprite 的“容器”时遇到了问题。我想以这种方式执行此操作,因为我希望能够移动整个 SKNode
,而不是单独移动每个组件。如果有人能解释我做错了什么,我将不胜感激。这是一个示例,其中我删除了不会导致任何错误的所有内容,只留下了导致错误的部分。
class GameScene: SKScene {
let jumper = SKSpriteNode(imageNamed: "doodler.png")
let brick = SKSpriteNode(imageNamed: "brick.png")
let worldNode = SKNode()
override func didMoveToView(view: SKView) {
addChild(worldNode)
setupBricks()
}
func addBrick() {
let randomX = random(min: size.width*0.1, max: size.height*0.9)
let randomY = random(min: size.width*0.1, max: size.height*0.9)
brick.position = CGPointMake(randomX, randomY)
brick.name = "brick"
brick.size = CGSizeMake(70, 10)
brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size)
worldNode.addChild(brick)
}
func setupBricks() {
for _ in 0...10 {addBrick()}
}
在另一个游戏中,我遇到了一个问题,每次两个特定对象发生碰撞时,游戏就会崩溃并给我带来与现在相同的错误:
libc++abi.dylib: terminating with uncaught exception of type NSException
最佳答案
尝试创建一个砖 block 类:
class Brick: SKSpriteNode {
init(position:CGPoint) {
let texture = SKTexture(imageNamed: "brick.png")
super.init(texture: texture, color: nil, size: texture.size())
self.position = position
self.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size)
}
在你的场景中:
func addBrick() {
let randomX = random(min: size.width*0.1, max: size.height*0.9)
let randomY = random(min: size.width*0.1, max: size.height*0.9)
let position = CGPointMake(randomX, randomY)
let brick = Brick(position)
worldNode.addChild(brick)
}
关于swift - 使用 `SKNode` 作为 "world container"触发 NSException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919761/