我正在使用Xcode 8.3.3。
我定制了一个平台"平台"某些平台的课程。这是我第一次尝试在场景编辑器中制作的精灵上使用自定义类,并且出于某种原因,精灵只是没有使用它。
看起来非常剪裁和干燥,我在场景编辑器中设置了一个默认设置的精灵,然后设置这样的自定义类标识符(我的实际项目的屏幕截图):
这是实际的课程:
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的屏幕截图中,我会这样放置:
然后使用我的自定义类,我想设置平台的所有其他要求,如碰撞位掩码,线性阻尼,旋转等。
然后在应用自定义类之后,我想引用并使用sprite及其在我的gamescene.swift文件中应用的自定义类来设置移动操作等内容。
答案 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
}