Swift:从两个变量名引用特定变量

时间:2015-07-20 22:48:44

标签: swift

我正在开发一个有20个精灵的项目,我注意到很多代码重复。我的精灵被命名为:sprite1,sprite2,sprite3 ....所以我正在寻找一种基于2个变量引用精灵的方法。第一个简单地是“精灵”,第二个是整数,所以我可以随时改变或循环一个范围。可以这样做吗? 随机示例:

x = 1
while x <= 10 {
        sprite & x.physicsBody.affectedByGravity = true
        x++
}

而不是:

sprite1.physicsBody.affectedByGravity = true
sprite2.physicsBody.affectedByGravity = true
sprite3.physicsBody.affectedByGravity = true
sprite4.physicsBody.affectedByGravity = true
sprite5.physicsBody.affectedByGravity = true

等......

1 个答案:

答案 0 :(得分:3)

这可以很简单:

for sprite in [sprite1, sprite2, sprite3, /* ... */] {
    sprite.physicsBody.affectedByGravity = true
}

但是,拥有一堆局部变量(或实例变量),如sprite1sprite2等,表明您没有以其他方式充分利用您的工具。这些精灵有什么意义?有没有办法可以使用场景结构来更好地管理它们?

例如,如果您要为其转换重力的所有节点都是同一父节点的子节点,则可以执行以下操作:

for sprite in someContainerNode.children {
    sprite.physicsBody.affectedByGravity = true
}

或者,如果您的场景中有一些节点子集需要执行此操作,您可以给它们所有相同的名称(例如,在Xcode中的SpriteKit场景编辑器中)并使用它来查找它们:

scene.enumerateChildNodesWithName("needsGravity") { node, stop in
    node.physicsBody.affectedByGravity = true
}