iOS Sprite Kit didBeginContact 无法正常工作

Posted

技术标签:

【中文标题】iOS Sprite Kit didBeginContact 无法正常工作【英文标题】:iOS Sprite Kit didBeginContact not work correctly 【发布时间】:2014-06-03 05:00:05 【问题描述】:

我有 2 张没有三角形背景的图像,我想将一个三角形与另一个连接起来,但 Sprite 套件认为我的图像是正方形而不是三角形,并在不合适的时间叫我 didBeginContact,例如:

我这样创建我的精灵:

self.sprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];

[self.sprite setSize:CGSizeMake(40, 40)];
self.sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.sprite.size];
self.sprite.physicsBody.mass = 0;
self.sprite.physicsBody.usesPreciseCollisionDetection = YES;    
self.sprite.physicsBody.categoryBitMask = Category;
self.sprite.physicsBody.collisionBitMask = 0;
self.sprite.physicsBody.contactTestBitMask = Category;   
self.sprite.physicsBody.dynamic = YES;

【问题讨论】:

你得到盒子,你必须手动绘制多边形。应该有行创建工具,如果没有,试试cocos2d。请记住,您的物理模型和您的视图是不同的东西。 SpriteKit 比 Cocos2d 集成了更多。 谢谢,但我认为必须是更简单的解决方案。 最简单的形状是正方形。 【参考方案1】:

两个物体之间的接触取决于它们的physicsBody,而不是它们的纹理。所以,当你使用

self.sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.sprite.size];

您正在附加一个矩形物理体。

你需要使用方法创建一个三角形的physicsBody:

[SKPhysicsBody bodyWithPolygonFromPath:path];

阅读方法here。

为了获取创建路径的值,您可以使用SKPhysicsBody Path Generator 工具。

【讨论】:

我尝试过但有一些问题,第二个节点在他接触任何东西之前开始 didBiginContact 可能 200 像素。 你对两个三角形使用不同的纹理吗? 首先我尝试相同的三角形,首先向下走并停留在我需要的地方,然后向下移动并在他接触第一个三角形之前启动 didBiginContact,可能有 200 像素远。 尝试使用物理调试器工具,例如可以在此处找到的工具:ymc.ch/en/ios-7-sprite-kit-physics-debugging-tool

以上是关于iOS Sprite Kit didBeginContact 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 Sprite Kit 动画速度变化

使用 Touch iOS Sprite Kit 画线

iOS 7 Sprite Kit 释放内存

Physics Body 边缘 IOS8,Sprite Kit

iOS 7 之前的 Sprite Kit 可用性

iOS Sprite Kit教程之xcode安装以及苹果帐号绑定