检查没有物理实体的 SKSprite 节点之间的碰撞

Posted

技术标签:

【中文标题】检查没有物理实体的 SKSprite 节点之间的碰撞【英文标题】:Check for collisions between SKSprite nodes that don't have physics bodies 【发布时间】:2017-03-10 03:55:29 【问题描述】:

我有两个 SkSprite 节点。

var player = SKSpriteNode()
var colorWheel = SKSpriteNode()

我有没有一种简单的方法来检测它们之间的碰撞,而不必给它们物理实体。感谢您的帮助。

【问题讨论】:

【参考方案1】:

有一种使用 update() 方法的方法

override func update(_ currentTime: TimeInterval) 

    if player.frame.intersects(colorWheel.frame) 
        //Nodes are colliding
    

这只是一个起点,将在节点发生碰撞的每一帧中触发。您将不得不写下额外的逻辑来处理一次性碰撞等。

【讨论】:

这会让所有东西都有一个方形的命中框 我的两个节点都是圆圈我可以让它们有一个圆形的“hitbox” 那是物理环境提供的便利。您应该使用physicsBodies 来检测碰撞,因为它们也会导致代码更具可读性。此外,physicsBodies 也可以制成任何形状。

以上是关于检查没有物理实体的 SKSprite 节点之间的碰撞的主要内容,如果未能解决你的问题,请参考以下文章

Swift 使 sksprite 节点随时间移动得更快

SKSprite 场景的内存问题

安装Oracle无法在指示的节点上执行物理内存检查

如何检测精灵节点上特定位置的 SKSpriteNode 之间的冲突?

315道面试题

Fabric 入门:Peer节点是啥