2015-08-28 82 views
1

大多數我寫到目前爲止只是有幾個對象,所以我把所有的遊戲邏輯在GameScene的SpriteKit代碼。現在我正在處理更復雜的事情,我正試圖將一些對象分離到自己的類中。我怎麼能初始化以下Orbita類以便simpleDescription字符串用於在GameSceneSKSpriteNodeImageName與圖片名稱屬性枚舉值初始化spritekit對象

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" 
     } 
    } 
    }} 

UPDATE

這是我已經能夠到目前爲止做的。我決定把我加了一些變化

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)' 

另外,如何能我想補充newOrbitaGameScene類變量,因爲我使用GameScene作爲參數?

+0

你的錯誤屬於'Ball',但在代碼中沒有球的提及。 – jtbandes

+0

比較遺憾的是,我得到了一些評論的東西混合的代碼,我只是做了修正。我仍然得到同樣的錯誤 – NSologistic

回答

1

orbitaType參數是OrbitaType,而不是Int。你需要通過像Orbita(orbitaType: .firstPlanet, ...這樣的東西。

+0

我想我必須做一些'rawValue'轉換或所以要通過'Int'。這是如何完成的? – NSologistic

+0

您可以創建'OrbitaType(rawValue:...)'。只是好奇,爲什麼你需要通過一個Int?通常按名稱使用枚舉常量是首選,因爲它更具可讀性。 – jtbandes

+0

你是對的,謝謝 – NSologistic

0

從單獨的類來訪問任何東西,你必須創建一個類的實例: 在gameScene:

let orbitaInstance = Orbita() //let instanceName = classYouWantToAccess() 

然後,內部的任何功能:

let image = SKSpriteNode(image: orbitaInstance.simpleDescription) // instanceOfClassYouAreAccessing.nameOfFunctionOrVariableYouAreAccessing 

希望這有助於還有祝你好運。