首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift SKConstraint

Swift SKConstraint
EN

Stack Overflow用户
提问于 2017-06-05 02:30:15
回答 1查看 140关注 0票数 0

在我的iOS橄榄球游戏应用中实现SKConstraint时遇到了困难。

基本上,我创建了多个称为“防御者”的节点,其数量取决于特定级别所需的数量。每个节点都被命名为defender+number。

因此,如果产生3个防御者,我就有3个防御者节点: defender1,defender2,defender3

这是我用来生成带有初始定位的defender节点的代码:

代码语言:javascript
复制
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]

我试着把上面的约束代码放在我的防御者产卵代码中,但似乎没有效果。

非常感谢您的任何建议

EN

回答 1

Stack Overflow用户

发布于 2017-06-05 07:03:59

如果其他人有这个问题,我已经创建了一个解决方案--但是它非常笨拙,对程序员来说也不是特别容易!

上面我解决的问题是,当我在迭代循环中一次添加一个defender childNode时,我不能将该特定的defender节点限制到另一个defender,因为它们不存在于该循环中。

因此,为了解决这个问题,在将每个defender节点添加到游戏场景后,我将一个节点迭代循环嵌套在另一个节点中。两者都迭代通过相同的defender节点集,但我将第一个迭代循环中的第二个迭代称为“next defender”。因此,对于第一个循环中出现的每个防御者,所有的防御者都会在第二个循环中出现,并分配一个不同的节点名称,然后我将所有第二个迭代节点的约束链接到第一个节点。

代码语言:javascript
复制
    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]
                })

            }
        })

    }

这太伤我的眼睛了,如果有人有更优雅的方法来实现这一点,我将非常感激!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44357489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档