【发布时间】:2015-07-04 06:11:19
【问题描述】:
我有一个包含三个精灵节点的应用程序,ball1、ball2、ball3。他们通过向上、向下、向右、向左倾斜设备来在场景中移动。一切正常。 我想添加一个效果,当任何两个球接触(碰撞)时会发出声音。我正在使用 SpriteKit,每个球都有一个物理体,它们有一个球的形状属性,我有precisionCollision 是的,每个球的 categoryBitMask 设置为 ballCategory1、2 和 3。 (或者我可以只使用一个类别) 我已经尝试了各种关于如何做到这一点的教程,但似乎没有任何效果。
我已经尝试将 Ray Wenderlich 的示例与我的 tweek 一起使用。但是,
//这是我的三个分类
static const uint32_t ballCategory = 0x1 << 1;
static const uint32_t ballCategory2 = 0x1 << 2;
static const uint32_t ballCategory3 = 0x1 << 3;
//这是我的三个节点
ball = [SKSpriteNode spriteNodeWithImageNamed:@"mankala piece"];
ball.scale = 1;
ball.position = CGPointMake(600, 500);
ball.physicsBody =
[SKPhysicsBody bodyWithCircleOfRadius:(ball.size.width/2)];
ball.physicsBody.usesPreciseCollisionDetection = YES;
ball.physicsBody.categoryBitMask = ballCategory;
ball.physicsBody.collisionBitMask = ballCategory2|ballCategory|ballCategory3;
ball.physicsBody.affectedByGravity = NO;
[self addChild:ball];
ball2 = [SKSpriteNode spriteNodeWithImageNamed:@"mankala piece"];
ball2.scale = 1;
ball2.position = CGPointMake(350, 200);
ball2.physicsBody =
[SKPhysicsBody bodyWithCircleOfRadius:(ball2.size.width/2)];
ball2.physicsBody.usesPreciseCollisionDetection = YES;
ball2.physicsBody.categoryBitMask = ballCategory2;
ball2.physicsBody.collisionBitMask = ballCategory2|ballCategory|ballCategory3;
ball2.physicsBody.affectedByGravity = NO;
[self addChild:ball2];
ball3 = [SKSpriteNode spriteNodeWithImageNamed:@"mankala piece"];
ball3.scale = 1;
ball3.position = CGPointMake(500, 400);
ball3.physicsBody =
[SKPhysicsBody bodyWithCircleOfRadius:(ball3.size.width/2)];
ball3.physicsBody.usesPreciseCollisionDetection = YES;
ball3.physicsBody.categoryBitMask = ballCategory3;
ball3.physicsBody.collisionBitMask = ballCategory2|ballCategory|ballCategory3;
ball3.physicsBody.affectedByGravity = NO;
[self addChild:ball3];
//这是我修改后的联系代码
- (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 & ballCategory) != 0)
{
NSLog(@"click");
}
if ((firstBody.categoryBitMask & ballCategory2) != 0)
{
NSLog(@"click2");
}
if ((firstBody.categoryBitMask & ballCategory3) != 0)
{
NSLog(@"click3");
}
}
但仍然没有任何反应。
有没有人在 spriteKit 中处理过碰撞。只想在两个不同的精灵节点接触时播放声音。
【问题讨论】:
-
您可以使用playSoundFileNamed 播放声音文件。您需要将声音文件添加到您的应用程序包中。
标签: sprite-kit