【问题标题】:SpriteKit - Struct for nodes positionSpriteKit - 节点位置的结构
【发布时间】:2016-05-15 23:05:49
【问题描述】:

我想创建一个我声明不同位置的结构。我有很多节点总是使用相同的位置,所以我不想每次都输入相同的 x 值和 y 值,我只想输入 position.p1。

private struct Positions {
    let P1 = myGameScene.frame.size.width * 0.05
    let P2 = myGameScene.frame.size.width * 0.15
}

现在我得到错误:Instance member frame cannot be used on type myGameScene.myGameScene 是 SKScene。

如果我尝试自我。而不是 myGameScene 我得到了错误:Value of type NSObject -> () -> myGameScene has no member frame.

需要帮助:-(

【问题讨论】:

    标签: swift struct sprite-kit skscene


    【解决方案1】:

    确实有效

    class MyGameScene: SKScene { }
    
    let myGameScene = MyGameScene()
    
    struct XPositions {
        let x0 = myGameScene.frame.size.width * 0.05
        let x1 = myGameScene.frame.size.width * 0.15
    }
    
    print(XPositions().x0)
    

    但是让我说这是解决问题的一种奇怪的方式:

    1. 您使用的是结构而不是数组
    2. 您需要创建结构的值,只是为了访问 Positions 的每个值的相同属性
    3. 属性(P1、P2)应为小写...

    建议

    为什么不向场景添加一个计算属性?

    class MyGameScene: SKScene {
        lazy var positions: [CGFloat] = {
            let factors: [CGFloat] = [0.15, 0.05]
            return factors.map { $0 * self.frame.size.width }
        }()
    }
    

    【讨论】:

    • 感谢您的精彩回答。我的错,我的代码看起来像import SpriteKit class MyGameScene: SKScene { let myGameScene = MyGameScene() struct XPositions { let x0 = myGameScene.frame.size.width * 0.05 let x1 = myGameScene.frame.size.width * 0.15 } } -> 所以我的结构在我的游戏类中。我确定您的计算属性会以更好的方式解决问题,但我真的不明白这一点。假设我将为 10 个不同的节点设置 10 个不同的位置,我将如何在 exampleNode.position = 中使用这 10 个位置?
    • @aignetti:您的代码有 2 个问题。 1)您在当前对象初始化之前使用实例属性,这是不可能的。 2)您创建了一个无限递归,因为 MyGameScene 包含另一个 MyGameScene 包含另一个 MyGameScene...
    • @aignetti: $0factors 的第 n 个元素。请阅读this 以更好地了解如何映射单词。
    • 谢谢。我会阅读并尝试一下。并感谢您的解释。我是 swift 新手,所以每个提示对我都非常有帮助。 :-)
    • 如果我想使用现在的位置,它会是什么样子? exampleNode.position.x = positions(0) 获取 self.frame.size.width * 0.15?
    【解决方案2】:

    使用边界而不是框架。

    private struct Positions {
         let P1 = myGameScene.bounds.size.width * 0.05
         let P2 = myGameScene.bounds.size.width * 0.15
    }
    

    【讨论】:

    • 感谢您的回答。 bounds 也有同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多