到目前为止我写的大部分SpriteKit代码只有一些对象,所以我将所有游戏逻辑放在GameScene中。现在我正在处理更复杂的事情,我试图将一些对象分成他们自己的类。如何初始化下面的Orbita
类,以便simpleDescription
字符串用于ImageName
中SKSpriteNode
的{{1}}?
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)'
添加为newOrbita
的类变量,因为我使用GameScene
作为参数?
答案 0 :(得分:1)
orbitaType
参数是OrbitaType
,而不是Int
。您需要传递Orbita(orbitaType: .firstPlanet, ...
。
答案 1 :(得分:0)
要从单独的类访问任何内容,您必须创建该类的实例: 在gameScene:
let orbitaInstance = Orbita() //let instanceName = classYouWantToAccess()
然后,在任何函数内部:
let image = SKSpriteNode(image: orbitaInstance.simpleDescription) // instanceOfClassYouAreAccessing.nameOfFunctionOrVariableYouAreAccessing
希望这有所帮助并祝你好运。