到目前为止,我编写的大部分 SpriteKit 代码都只有几个对象,因此我将所有游戏逻辑都放在了 GameScene 中。现在我正在做一些更复杂的事情,我试图将一些对象分成它们自己的类。我如何初始化下面的 Orbita
类,以便 simpleDescription
字符串用于 SKSpriteNode
的 ImageName
GameScene
?
class Orbita {
var orbita : SKSpriteNode
init(orbita: SKSpriteNode) {
self.orbita = orbita
physics ()
}
func physics () {
orbita.physicsBody = SKPhysicsBody(circleOfRadius: orbita.frame.size.width/2)
orbita.physicsBody?.friction = 0
orbita.physicsBody?.restitution = 1
orbita.physicsBody?.linearDamping = 0
orbita.physicsBody?.angularDamping = 0
orbita.physicsBody?.allowsRotation = false
orbita.physicsBody?.applyImpulse(CGVectorMake(4, -4))
}
enum OrbitaType: Int {
case firstPlanet = 0, secondPlanet, thirdPlanet
func simpleDescription()->String {
switch self {
case .firstPlanet:
return "green"
case .secondPlanet:
return "red"
case .thirdPlanet:
return "yellow"
}
}
}}
更新
这是我到目前为止能够做的。我决定做一些改变
class Orbita {
var sprite : SKSpriteNode
var orbitaType : OrbitaType
init(orbita: SKSpriteNode) {
self.orbita = orbita
physics ()
}
init(orbitaType: OrbitaType, gameScene: GameScene) {
self.orbitaType = orbitaType
sprite = SKSpriteNode(imageNamed: orbitaType.simpleDescription())
sprite.name = orbitaCategoryName
sprite.position = CGPointMake(3*gameScene.frame.size.width/4, 3*gameScene.frame.size.height/4)
sprite.zPosition = 10
gameScene.addChild(sprite)
physics()
}
func physics () {
sprite.physicsBody = SKPhysicsBody(circleOfRadius: sprite.frame.size.width/2)
sprite.physicsBody?.friction = 0
sprite.physicsBody?.restitution = 1
sprite.physicsBody?.linearDamping = 0
sprite.physicsBody?.angularDamping = 0
sprite.physicsBody?.allowsRotation = false
sprite.physicsBody?.applyImpulse(CGVectorMake(4, -4))
}
enum OrbitaType: Int {
case firstPlanet = 0, secondPlanet, thirdPlanet
func simpleDescription()->String {
switch self {
case .firstPlanet:
return "green"
case .secondPlanet:
return "red"
case .thirdPlanet:
return "yellow"
}
}
}}
在 GameScene
类中,我添加了以下内容:
var newOrbita = Orbita(orbitaType: 0, gameScene: self)
但我不断收到以下错误:
Cannot invoke initializer for type 'Orbita' with an argument list of type '(orbitaType: Int, gameScene: GameScene)'
此外,由于我使用 GameScene
作为参数,如何将 newOrbita
添加为 GameScene
的类变量?
最佳答案
orbitaType
参数是一个 OrbitaType
,而不是一个 Int
。您需要传递类似 Orbita(orbitaType: .firstPlanet, ...
.
关于swift - 使用 Image Name 属性的枚举值初始化 spritekit 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262510/