场景编辑器中的SKSpriteNode未使用指定的自定义类

时间:2017-07-01 07:02:24

标签: ios swift3 sprite-kit

我正在使用Xcode 8.3.3。

我定制了一个平台"平台"某些平台的课程。这是我第一次尝试在场景编辑器中制作的精灵上使用自定义类,并且出于某种原因,精灵只是没有使用它。

看起来非常剪裁和干燥,我在场景编辑器中设置了一个默认设置的精灵,然后设置这样的自定义类标识符(我的实际项目的屏幕截图):enter image description here

这是实际的课程:

import UIKit
import SpriteKit

class Platform: SKSpriteNode {

init() {

    let texture = SKTexture(imageNamed: "blue_button01")

    super.init(texture: texture, color: SKColor.clear, size: texture.size())

    physicsBody = SKPhysicsBody(rectangleOf: texture.size())
    physicsBody?.categoryBitMask = CollisionTypes.platform.rawValue
    physicsBody?.contactTestBitMask = CollisionTypes.player.rawValue
    physicsBody?.collisionBitMask = CollisionTypes.player.rawValue
    physicsBody?.affectedByGravity = false
    physicsBody?.restitution = 0
    physicsBody?.isDynamic = false
    physicsBody?.allowsRotation = false
    setScale(2)
    zPosition = 2
    physicsBody?.linearDamping = 0.0

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}



}

它没有运行错误并且符合要求,但是当游戏加载时,它会加载一个默认设置的红色精灵。我期望它使用" Platform.swift:类的设置来加载精灵,但它没有。

非常感谢任何建议。

(我知道其他布局关卡的方法,但我真的很想在场景编辑器中布置基础知识,然后在代码中自定义所有内容。)

编辑:

我项目工作流程的最终目标是打开.sks并将精灵放在我想要的地方,我想要它们有多大,以及我希望它们使用什么样的纹理,例如选择蓝色平台在.sks的屏幕截图中,我会这样放置:enter image description here

然后使用我的自定义类,我想设置平台的所有其他要求,如碰撞位掩码,线性阻尼,旋转等。

然后在应用自定义类之后,我想引用并使用sprite及其在我的gamescene.swift文件中应用的自定义类来设置移动操作等内容。

1 个答案:

答案 0 :(得分:4)

.sks文件初始化精灵节点时,不会调用您定义的init。相反,它会调用init(coder:)初始值设定项。你应该在这个初始化器中设置你的精灵:

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    texture = SKTexture(image: #imageLiteral(resourceName: "Spaceship"))
    let texture = SKTexture(imageNamed: "blue_button01")
    self.texture = texture
    color = .clear
    size = texture.size()
    physicsBody = SKPhysicsBody(rectangleOf: texture.size())
    physicsBody?.categoryBitMask = CollisionTypes.platform.rawValue
    physicsBody?.contactTestBitMask = CollisionTypes.player.rawValue
    physicsBody?.collisionBitMask = CollisionTypes.player.rawValue
    physicsBody?.affectedByGravity = false
    physicsBody?.restitution = 0
    physicsBody?.isDynamic = false
    physicsBody?.allowsRotation = false
    setScale(2)
    zPosition = 2
    physicsBody?.linearDamping = 0.0
}