如何检测 SKSpriteNode 和 SKView SpriteKit 之间的冲突

Posted

技术标签:

【中文标题】如何检测 SKSpriteNode 和 SKView SpriteKit 之间的冲突【英文标题】:How to detect collision between SKSpriteNode and SKView SpriteKit 【发布时间】:2014-05-31 13:26:18 【问题描述】:

我有九个SKSpriteNodes 从屏幕的顶部落到底部。我也有SKView,我可以把它拖到屏幕上。如何动态检测我的SKView 与九个SKSpriteNodes 之一的冲突?

【问题讨论】:

【参考方案1】:

SKView 没有physicsBody 属性,所以它不能碰撞。

但是,您可以手动检查 SKViewframe 是否与 SKSpriteNode 的框架相交:

- (void)update:(CFTimeInterval)currentTime 
    if (CGRectIntersectsRect(skView.frame, node.frame) 
        ....
    

【讨论】:

【参考方案2】:

在场景中,您可以检测框架与 SKSpriteNodes 之间的碰撞。

在您的 Scene.m 中,添加 initWithSize:(CGSize)size 中的代码:

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsBody.categoryBitMask = kSceneCategory;
self.physicsBody.contactTestBitMask = kSKNodeCategory; // this is your SKSpriteNode's categoryBitMask

- (void)didBeginContact:(SKPhysicsContact *)contact,你可以检测到碰撞。

【讨论】:

以上是关于如何检测 SKSpriteNode 和 SKView SpriteKit 之间的冲突的主要内容,如果未能解决你的问题,请参考以下文章

未检测到 SkSpriteNode 冲突

如何检测 SKSpriteNode 接触但不反应?

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

如何找到 SKSpriteNode 的速度作为 x 和 y 值?

如何使用该节点的自定义类检测在单独场景中创建的 skspritenode 上的触摸

检测用户何时点击 SKSpriteNode