Sprite Kit 碰撞检测

3

你好,我正在尝试在我的游戏中设置碰撞检测,我想添加碰撞检测,以便当气球撞上尖刺时它们会爆炸。我已经查看了Ray Wenderliches的教程,但是由于它不适用于我的情况,所以我无法理解。有什么想法可以为我的情况设置它?

尖刺位于屏幕顶部,气球从底部产生。


你可以在 -(void)didBeginContact: 方法中实现碰撞。 - NiravPatel
2个回答

15

设置两个物体之间的碰撞,基本步骤是首先设置代表可以碰撞的不同物体的常量。我通常会创建一个constants.h文件,在其中保存将在整个游戏/应用程序中使用的所有变量。

在constants.h文件中声明以下内容,或者只需在类中声明它们作为全局变量:


static const int balloonHitCategory = 1;
static const int spikeHitCategory = 2;

现在你要做的是为气球和尖刺设置物理属性。

SKSpriteNode *ballooon = [SKSpriteNode spriteNodeWithImageNamed:@"yourimagefilename"];
ballooon.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:yourSize];

ballooon.physicsBody.categoryBitMask = balloonHitCategory;
ballooon.physicsBody.contactTestBitMask = spikeHitCategory;
ballooon.physicsBody.collisionBitMask =  spikeHitCategory;

你应该设置你的大小并为两个精灵节点设置图像

SKSpriteNode *spikes = [SKSpriteNode spriteNodeWithImageNamed:@"yourimagefilename"];
spikes.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(yourSizeX, yourSizeY)];

spikes.physicsBody.categoryBitMask = spikeHitCategory;
spikes.physicsBody.contactTestBitMask = balloonHitCategory;
spikes.physicsBody.collisionBitMask =  balloonHitCategory;

为了进行碰撞设置,按照以下方法进行:

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    SKPhysicsBody *firstBody, *secondBody;

    firstBody = contact.bodyA;
    secondBody = contact.bodyB;

   if(firstBody.categoryBitMask == spikeHitCategory || secondBody.categoryBitMask == spikeHitCategory)
   {

       NSLog(@"balloon hit the spikes");
       //setup your methods and other things here 

   }
}

在碰撞之前,您还应该添加“点”。在您的场景 .h 文件中添加。

@interface myScene : SKScene <SKPhysicsContactDelegate>

@end

并在init函数的.m文件中添加:

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
    self.physicsWorld.contactDelegate = self;

    }
return self;
}

想了解更多关于碰撞处理的内容,请查看苹果文档和冒险游戏示例: https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/CodeExplainedAdventure/HandlingCollisions/HandlingCollisions.html#//apple_ref/doc/uid/TP40013140-CH5-SW1


在所有关于SpriteKit碰撞检测的教程中,这可能是最简洁和清晰的实现方式的解释。 - slow

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接