假设以下内容:
SKSpriteNode
个。 问题:如何在没有循环遍历所有精灵的情况下找出哪个SKSpriteNode
位于特定位置?
为此,我实施了一个SKSpriteNode
,框,它是透明的,具有覆盖特定位置范围的纹理,并相应定位。
SKSpriteNode
方法contains
和intersects
似乎很有希望,但要求我分别传递一个点或精灵。
问题:如何让SKSpriteNode
报告与之交叉的精灵(如果有的话)?再次,没有循环遍历每个精灵。如果两个精灵与 box 相交,则只返回与 box 最突出相交的那个。
图: 这不是我的实际用例,但说明了这一点。有很多精灵(超过下面可视化的)并且有一个感兴趣的领域:
我想知道那里有精灵。
答案 0 :(得分:2)
如果没有SOMETHING循环遍历sprite,就没有办法做到这一点。那是:
GameplayKit提供了一些关于做这类事情的优化:https://developer.apple.com/reference/gameplaykit/gkrtree
答案 1 :(得分:1)
UITapGestureRecognizer
附加到视图CGPoint pointInView = [tapper locationInView:mySKScene.view]
CGPoint pointInScene = [mySKScene convertPointFromView:pointInView]
SKNode *touchedNode = [self nodeAtPoint:pointInScene];
答案 2 :(得分:1)
您可以使用SKPhysicsContactDelegate
来检测碰撞(重叠)。
将物理实体分配给所有sknodes,在要检测内部sknodes的区域上动态添加一个,处理{{1}},再次移除主体