2015-07-20 145 views
0

我正在处理一个包含20个sprites的项目,并且我注意到很多代码重复。我的精灵名为:sprite1,sprite2,sprite3 ....所以我正在寻找一种基于2个变量引用精灵的方法。第一个简单的是“精灵”,第二个是整数,所以我可以在任何时候改变或循环一个范围。是否有可能做这样的事情? 随便举个例子:Swift:来自两个变量名称的引用特定变量

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 

等等...

+2

它可能会更好地把它们全部在数组中,而不是循环通过你想要的索引。 – AdamPro13

+0

这可能是一个很好的解决方案。你能告诉我一个例子吗?在处理精灵时,我不确定如何引用数组或其中的一部分。 – user4812000

+0

有不同的组织方式,你可以将不同数组中的普通属性组合起来......或者其他评论建议把它们放在一起并按索引范围访问,虽然这不是很安全。 – Ixx

回答

3

这可能是那样简单:

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

然而,有一堆局部变量(或实例变量),如sprite1,sprite2,e tc表明你没有以其他方式善用你的工具。这些精灵有什么意义?有没有一种方法可以使用场景结构来更好地管理它们?

例如,如果所有的节点要打开重力上是相同的父节点的孩子,你可以改为做这样的事情:

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

或者,如果有一个在节点的某个子集你可以给它们命名(例如,在Xcode的SpriteKit场景编辑器中),并用它来找到它们:

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