XCode Spritekit,与 png 的不透明部分发生碰撞

Posted

技术标签:

【中文标题】XCode Spritekit,与 png 的不透明部分发生碰撞【英文标题】:XCode Spritekit, collision with non-transparent sections of an png 【发布时间】:2014-02-28 19:51:49 【问题描述】:

我也有同样的问题:SKSpriteKit, detect non-transparency parts

我的帖子从那里被删除。我不知道为什么,在其他论坛,这是一个重复的帖子! 但是,好吧,如果你喜欢的话。可怜的丹尼仍然没有答案!

好吧,问题又来了: 有两个带有透明区域的 png 文件。就像danny huang的帖子一样。 如果它们碰撞“-(void)didBeginContact:(SKPhysicsContact *)contact”方法就会触发。 但我们要寻找的是它们只是与图像的不透明区域发生碰撞。

下面是一段小代码:

...
SKTexture *nyanTexture1 = [SKTexture textureWithImageNamed:@"test.png"];
nyanTexture1.filteringMode = SKTextureFilteringNearest;
nyan = [SKSpriteNode spriteNodeWithTexture:nyanTexture1];
nyan.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:nyan.size.height / 2];
nyan.physicsBody.dynamic = YES;
nyan.physicsBody.allowsRotation = NO;
...
nyan.physicsBody.categoryBitMask = nyanKategorie;
nyan.physicsBody.collisionBitMask = worldKategorie | tunnelKategorie;
nyan.physicsBody.contactTestBitMask = worldKategorie | tunnelKategorie;
...
WasserFallTexture1 = [SKTexture textureWithImageNamed:@"Wasserstrahl1.png"];
SKSpriteNode* tunnel1 = [SKSpriteNode spriteNodeWithTexture:WasserFallTexture1];
tunnel1.position = CGPointMake( 0, y );
tunnel1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:tunnel1.size];
tunnel1.physicsBody.dynamic = NO;
tunnel1.physicsBody.categoryBitMask = tunnelKategorie;
tunnel1.physicsBody.contactTestBitMask = nyanKategorie;
...
[tunnel addChild:tunnel1];

如果没有 Spritekit 的出色引擎,我也可以做到这一点。我也实现了它,但我想知道一种使用 SpriteKit 引擎的方法。 我知道我可以更改“SKPhysicsBody”类型和区域,但我正在寻找一个可以捕捉两个 png 文件非透明区域之间碰撞的解决方案。

谢谢, 山姆

【问题讨论】:

【参考方案1】:

听起来你需要真正看到物理实体的动作。 SKView 上有一个名为 showsPhysics 的属性。将其设置为YES,您可以看到您的精灵的物理实体在运行。

【讨论】:

以上是关于XCode Spritekit,与 png 的不透明部分发生碰撞的主要内容,如果未能解决你的问题,请参考以下文章

在使用PNG透明和不透明时,ie7和ie8中的盈余而不是透明

无法在 Xcode 6 Playground 中使用 SpriteKit

“纹理图集不支持模板渲染”SpriteKit 和 Xcode

从 AppDelegate 调用 GameScene 方法(Swift 3、SpriteKit、Xcode 8)

Xcode SpriteKit:如何在 Xcode 13 中添加 Sprite Atlas

(Spritekit) iPad 分辨率不是 1024x768?