如何检测精灵套件中的碰撞?

Posted

技术标签:

【中文标题】如何检测精灵套件中的碰撞?【英文标题】:How to detect a collision in sprite kit? 【发布时间】:2013-10-12 17:24:01 【问题描述】:

我正在使用 Sprite Kit 制作游戏,但在 SpriteNode 之间的碰撞检测方面遇到了困难, 我设置了一个名为 sprite 的 sprite 节点和一个名为 platform 的 sprite 节点。 我希望精灵在与平台碰撞时停止下落。 这就是我所拥有的:

        SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"bal.png"];
        sprite.position = CGPointMake(self.frame.size.width/4 + arc4random() % ((int)self.frame.size.width/2), (self.frame.size.height/2 + arc4random() % ((int)self.frame.size.height/2)));
        sprite.color = [self randomColor];
        sprite.colorBlendFactor = 1.0;
        sprite.xScale = 0.2;
        sprite.yScale = 0.2;
        [self addChild:sprite];
        sprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2];
        self.physicsWorld.gravity = CGVectorMake(0.0f, -4.0f);

        SKSpriteNode *platform = [SKSpriteNode spriteNodeWithImageNamed:@"YellowPlatform.png"];
        platform.position = CGPointMake(CGRectGetMidX(self.frame), -200+CGRectGetMidY(self.frame));
        platform.size = CGSizeMake(180, 10);
        [self addChild:platform];

提前致谢!

【问题讨论】:

【参考方案1】:

来自关于 SKNodephysicsBody 属性的 Apple 文档:

默认值为nil,表示节点完全不参与物理模拟。

如果你想让你的球在平台上滚动或者你必须设置平台的 physicsBody 属性。

此外,您必须在平台上禁用 dynamic 属性:

一个布尔值,指示物理体是否被物理模拟移动。

否则,如果另一个受到物理影响的物体落在平台上,您的平台就会倒下/移动。

链接:https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/Reference/Reference.html#//apple_ref/occ/instp/SKNode/physicsBody https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/Reference/Reference.html

【讨论】:

感谢您的回复,我理解您的意思,但我需要的确切代码行是什么? 据说你需要为你的平台设置一个 physicsBody 所以你需要类似:platform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:platform.size];此外,您必须禁用 dynamics 以使平台不会倒下:platform.physicsBody.dynamic = NO; 非常感谢@lahmar! 不客气 :) 如果您能接受答案(我的答案留下绿色复选标记),那就太好了。这样,其他人就可以看到这个问题已被成功回答,而其他寻找相同问题答案的人可以更快地找到答案。

以上是关于如何检测精灵套件中的碰撞?的主要内容,如果未能解决你的问题,请参考以下文章

子精灵的精灵套件碰撞检测

如何检测pygame中的碰撞?

Sprite 套件中的 SKShapeNode 碰撞检测未检测到碰撞

区分碰撞中的精灵

在精灵套件中发生碰撞时停止对象

Python进阶篇十一Pygame的精灵和碰撞检测