当 skspritenode 的帧与另一个 skspritenode 的帧相交时,我可以通过什么方式调整它的位置以防止它们重叠?

what way can i adjust the position of an skspritenode when it's frame intersects another skspritenode's to prevent them from overlapping?

提问人:quickj 提问时间:9/13/2023 更新时间:9/13/2023 访问量:14

问:

我想更新我的skspritenodes的位置,以便在它们开始重叠时将它们推开。我正在考虑尝试使用if语句来检查一个框架是否与另一个框架相交,但我愿意尝试另一种解决方案。

var ships: [SKSpriteNode] = [SKSpriteNode]()
for _ in 1...5 {
        let barge = SKSpriteNode(imageNamed: "BattleShip2")
        barge.setScale(0.1)
        barge.position = CGPoint(x: view.frame.midX, y: view.frame.midY)
        addChild(barge)
        ships.append(barge)
    }

通过这个初始化循环,我最终得到了 5 个对象,它们都堆叠在视图的中心。我希望它们慢慢地彼此分离,直到它们不再重叠。这就是我所处的位置:

    var currentShip = SKSpriteNode()
    for ship in ships {
        if ship.frame.intersects(currentShip.frame) {
            // do something
        }
        currentShip = ship
    }
Swift Sprite-Kit 游戏开发 SkSpriteNode

评论

0赞 Fault 9/13/2023
内置的物理引擎将执行此类行为。或者你可以自己滚动:(1)给每艘船一个速度矢量;(2)如果两艘船相交,计算它们中心之间的矢量,并将其归一化/缩小以获得较小的推力;(3)将该推向量添加到每艘船在彼此背对方向上的速度上;(4)通过更新循环对所有飞船施加摩擦阻力,使飞船最终停下来。例如:ship.velocity *= 0.97。哦,不要在 midX/midY ;) 开始它们稍微随机化起始位置

答: 暂无答案