在我的iOS橄榄球游戏应用中实现SKConstraint时遇到了困难。
基本上,我创建了多个称为“防御者”的节点,其数量取决于特定级别所需的数量。每个节点都被命名为defender+number。
因此,如果产生3个防御者,我就有3个防御者节点: defender1,defender2,defender3
这是我用来生成带有初始定位的defender节点的代码:
for defenderNumber in 1 ..< (numberDefenders+1) {
let defender = Defender(imageNamed: "defender_\(teamShirt)")
defender.position = CGPoint(x: defenderXposition, y: defenderYposition)
defender.size = CGSize (width: 50, height: 35)
defender.zPosition = 2
defender.name = "defender\(defenderNumber)"
defenderXposition = defenderXposition + defenderSpacing
addChild(defender)
}作为游戏的一部分,防守者随后以各种防御模式追赶攻击者。然而,我注意到后卫倾向于聚集在一起,我想包括一个约束,即后卫之间保持最小的距离。
我想我应该使用这样的SKConstraint:
let range = SKRange(lowerLimit:150, upperLimit:1000) let constraint = SKConstraint.distance(range, to:defender) defender.constraints = [constraint]
我试着把上面的约束代码放在我的防御者产卵代码中,但似乎没有效果。
非常感谢您的任何建议
发布于 2017-06-05 07:03:59
如果其他人有这个问题,我已经创建了一个解决方案--但是它非常笨拙,对程序员来说也不是特别容易!
上面我解决的问题是,当我在迭代循环中一次添加一个defender childNode时,我不能将该特定的defender节点限制到另一个defender,因为它们不存在于该循环中。
因此,为了解决这个问题,在将每个defender节点添加到游戏场景后,我将一个节点迭代循环嵌套在另一个节点中。两者都迭代通过相同的defender节点集,但我将第一个迭代循环中的第二个迭代称为“next defender”。因此,对于第一个循环中出现的每个防御者,所有的防御者都会在第二个循环中出现,并分配一个不同的节点名称,然后我将所有第二个迭代节点的约束链接到第一个节点。
for defenderNumber in 1 ..< (self.numberDefenders+1) {
enumerateChildNodes(withName: "defender\(defenderNumber)", using: {node, stop in
let defender = node as! Defender
for defenderNumber in 1 ..< (self.numberDefenders+1) {
self.enumerateChildNodes(withName: "defender\(defenderNumber)", using: {node, stop in
let nextdefender = node as! Defender
let range = SKRange(lowerLimit:50)
let constraint = SKConstraint.distance(range, to:nextdefender)
defender.constraints = [constraint]
})
}
})
}这太伤我的眼睛了,如果有人有更优雅的方法来实现这一点,我将非常感激!
https://stackoverflow.com/questions/44357489
复制相似问题