我正在尝试通过制作像Game这样的Flappy Bird的教程来学习SpriteKit。在我的游戏版本中,管道不是管道,并且是不规则形状的物体,它们不会填满它们所绘制的整个矩形帆布。但是,由于画布是矩形的,SpriteKit会在另一个物体接触到角落时检测到碰撞,这在技术上是不可见的。我怎么能纠正这个?
- (void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if ((firstBody.categoryBitMask & pillerCategory) != 0 &&
(secondBody.categoryBitMask & flappyBirdCategory) != 0)
{
[self pillar:(SKSpriteNode *) firstBody.node didCollideWithBird:(SKSpriteNode *) secondBody.node];
}
else if ((firstBody.categoryBitMask & flappyBirdCategory) != 0 &&
(secondBody.categoryBitMask & bottomBackgroundCategory) != 0)
{
[self flappyBird:(SKSpriteNode *)firstBody.node didCollideWithBottomScoller:(SKSpriteNode *)secondBody.node];
}
}
我只知道实际接触图片时要检测到的碰撞。而不是填满我所有矩形画布的管道:
答案 0 :(得分:1)
在iOS 8中,您可以根据纹理的Alpha通道创建物理实体。 (参见bodyWithTexture
。)这可以让你获得精确的形状,但性价比很高。
要平衡碰撞精度和性能,或者如果您还支持iOS 7,您可以改为从路径创建物理实体,或者以近似您需要的形状组合多个较小的物理实体。
答案 1 :(得分:-1)
使用定制的身体。我想,this会帮助你。