精灵套件碰撞:忽略透明度?
我正在用Xcode的spritekit构build游戏。 它是一个平台游戏,现在它与平坦的地面部件运作良好。 我想知道是否可以忽略png中碰撞的透明度。 也就是说,如果我有一个曲面地板和填充槽的透明的地面块,我可以让玩家走曲线而不是覆盖整个东西的方形边界框吗? 我能find的唯一例子就是Gamemaker GML语言,你可以进行“精确的”碰撞,使得图像中的空白空间不被视为精灵的一部分。 我可以在必要时提供代码,但这似乎更像是一个概念性问题。 提前致谢
嘿,苹果文档中提供了一个简单的解决scheme。
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; sprite.physicsBody = [SKPhysicsBody bodyWithTexture:sprite.texture size:sprite.texture.size];
这会在纹理的物理path周围创build一个物理主体。
模拟物理 – SpriteKit编程指南
这是所有你如何实例化所讨论节点的物理体。
node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.size];
可能是制作一个physicsBody的最简单也是最常用的方法,但是也会产生上面确定的问题,因为对于所有的碰撞目的,节点都是一个矩形。
看看SKPhysicsBody的文档来查看其他选项。 PolygonFromPath和BodyWithBodies可能是最适合你在做什么的。
SKPhysicsBody是正确的举措,只是想指出,SKPhysicsBody有一个单独的(简化)掩模图像来提高性能,从颜色和几何angular度简化,这是代码:
let birdMask: UInt32 = 0x1 << 0 let pipeMask: UInt32 = 0x1 << 1 //... pipeImage = SKSpriteNode(imageNamed: "realImage") //... size and position let maskTexture = SKSpriteNode(imageNamed: mask) maskTexture.size = pipeImage!.size // size of texture w/ real imageNamed pipeImage!.physicsBody?.usesPreciseCollisionDetection = true pipeImage!.physicsBody = SKPhysicsBody(texture: maskTexture.texture!, size: size) pipeImage!.physicsBody?.affectedByGravity = false // disable falling down... pipeImage!.physicsBody?.allowsRotation = false pipeImage!.physicsBody?.isDynamic = true pipeImage!.physicsBody?.friction = 0 pipeImage!.physicsBody?.categoryBitMask = pipeMask pipeImage!.physicsBody?.collisionBitMask = birdMask | pipeMask pipeImage!.physicsBody?.contactTestBitMask = birdMask | pipeMask
和更详细的例子/指南 。