swift - 使用 Image Name 属性的枚举值初始化 spritekit 对象

标签 swift sprite-kit

到目前为止,我编写的大部分 SpriteKit 代码都只有几个对象,因此我将所有游戏逻辑都放在了 GameScene 中。现在我正在做一些更复杂的事情,我试图将一些对象分成它们自己的类。我如何初始化下面的 Orbita 类,以便 simpleDescription 字符串用于 SKSpriteNodeImageName 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/

相关文章:

ios - SpriteKit 使用手势识别器中的选择器从 GameScene 调用另一个类中的函数

swift - 任何碰撞游戏结束 - Swift Spritekit

ios - 从 UIColors 或 NSColors 数组创建 CGColors 数组

ios - UIActivity ActivityViewController 在 Swift 中的 iPad 上崩溃

swift - 音频流格式和数据类型与 Core Audio 的混淆

ios - 使用 SpriteKit 为 iPhone X 调整屏幕大小

ios - 游戏中心 "Done"按钮问题?

ios - 解包可选值时意外发现 nil,但变量有值

ios - Google geocoding api OVER_QUERY_LIMIT 在 5 个请求后发生

swift - SpriteKit 没有释放所有使用的内存