如果2个精灵在精灵工具包中碰撞,如何运行动作?

时间:2014-03-28 21:44:51

标签: ios sprite-kit

我想让两个精灵在精灵套装中相互碰撞时消失。苹果文档中的例子并没有真正帮助我,所以如果你能解释它会很好。 :)

2 个答案:

答案 0 :(得分:0)

    SKAction* _vanishAction =[SKAction fadeOutWithDuration: 1];

    [sprite runAction:_vanishAction completion:^(void){
            [sprite removeFromParent];     
    }];

答案 1 :(得分:0)

好的,所以你需要做几件事。

我假设你有两个精灵......

SKSpriteNode *sprite1;
SKSpriteNode *sprite2;

这些目前正在您的场景中飞行,可能会或可能不会相互接触。

因此,您需要设置所有内容以启用命中测试和回拨。

首先,将物理实体添加到精灵......

sprite1.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:10];
sprite2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(10, 10)];
// this is a couple of examples, you'll have to set yours up to match the sprite size, shapes

接下来,您需要为精灵添加类别。这为物理引擎提供了一些关于它是什么类型的身体的信息......

sprite1.physicsBody.categoryBitMask = 1 << 0;
sprite2.physicsBody.categoryBitMask = 1 << 1;
// again this is an example. You probably want to put these in an NS_OPTIONS typedef.

然后你需要告诉物理引擎你想要被告知哪个联系人。在这种情况下,当sprite1(1&lt;&lt; 0)与sprite2(1&lt;&lt; 1)接触时,你想要被告知。

因此...

sprite1.physicsBody.contactTestBitMask = 1 << 1; // it will test for contact against sprite 2
sprite2.physicsBody.contactTestBitMask = 1 << 0; // test against sprite 1.

现在在你的场景中你需要采用<SKPhysicsContactDelegate>并将场景设置为物理代表......

self.physicsWorld.contactDelegate = self;

然后创建方法......

- (void)didBeginContact:(SKPhysicsContact *)contact
{
    // these two physics bodies have come into contact!

    SKSpriteNode *firstContactNode = contact.bodyA.node;
    SKSpriteNode *secondContactNode = contact.bodyB.node;

    // now remove them...

    [firstContactNode removeFromParent];
    [secondContactNode removeFromParent];
}