使用图像名称属性

时间:2015-08-28 02:37:40

标签: swift sprite-kit

到目前为止我写的大部分SpriteKit代码只有一些对象,所以我将所有游戏逻辑放在GameScene中。现在我正在处理更复杂的事情,我试图将一些对象分成他们自己的类。如何初始化下面的Orbita类,以便simpleDescription字符串用于ImageNameSKSpriteNode的{​​{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作为参数?

2 个答案:

答案 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

希望这有所帮助并祝你好运。