我想让两个精灵在精灵套装中相互碰撞时消失。苹果文档中的例子并没有真正帮助我,所以如果你能解释它会很好。 :)
答案 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];
}