对于我正在创建的游戏,SKSpriteNode逐渐进入用户的屏幕。屏幕底部附近还有一个SKSpriteNode(位置是静态的),仅剩余一点空间供原始SKSpriteNode放入。我需要检测第一个SKSpriteNode何时位于第二个SKSpriteNode之下,而COMPLETELY有点麻烦。这是我当前正在使用的代码:
if (pos.y > barPosY) //pos.y = 1st SKSpriteNode, barPosY = 2nd SKSpriteNode
{
touchedTooEarly = true
}
出于某种原因,当第一个SKSpriteNode移到第二个SKSpriteNode上时(不是全部),它仍然检测到它已完全结束。我是否缺少坐标空间问题?
最佳答案
逻辑
精灵a
涵盖了精灵b
,如果
b.frame
在a.frame
内b.zPosition
低于a.zPosition
扩展名
现在让我们建立一个扩展
extension SKSpriteNode {
func isCoveredBy(otherSprite: SKSpriteNode) -> Bool {
let otherFrame = CGRect(
origin: convertPoint(otherSprite.position, fromNode: otherSprite),
size: otherSprite.frame.size
)
return zPosition < otherSprite.zPosition && CGRectContainsRect(frame, otherFrame)
}
}
问题1:透明度
该机制完全忽略了透明度。
问题2:相同的精灵
如果比较两个相同类型的Sprite,则
CGRectContainsRect
函数仅在它们完全对齐时才返回true。通过比较精灵,您可以解决此问题,创建一个较小的矩形。关于ios - 检测何时SKSpriteNode完全位于另一个SKSpriteNode之下,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38127974/