Sprite kit 当两个节点碰撞时播放声音
我有一个有三个精灵节点的应用程序,ball1,ball2,ball3。他们通过向上、向下、向右、向左倾斜设备来移动场景。一切正常。 我想添加一个效果,当任何两个球接触(碰撞)时,会播放一个声音。我正在使用SpriteKit,每个球都有一个物理实体,它们有一个球形状属性,我有precisionCollision Yes,categoryBitMask为每个球设置为ballCategory1、2和3。(或者我可以只使用一个类别) 我已经尝试了各种各样的教程如何做到这一点,但似乎没有任何工作 我试着用Ray Wenderlich的例子和我的tweek。但是, //以下是我的三个类别Sprite kit 当两个节点碰撞时播放声音,sprite-kit,Sprite Kit,我有一个有三个精灵节点的应用程序,ball1,ball2,ball3。他们通过向上、向下、向右、向左倾斜设备来移动场景。一切正常。 我想添加一个效果,当任何两个球接触(碰撞)时,会播放一个声音。我正在使用SpriteKit,每个球都有一个物理实体,它们有一个球形状属性,我有precisionCollision Yes,categoryBitMask为每个球设置为ballCategory1、2和3。(或者我可以只使用一个类别) 我已经尝试了各种各样的教程如何做到这一点,但似乎没有任何工作 我试着用
static const uint32_t ballCategory = 0x1 << 1;
static const uint32_t ballCategory2 = 0x1 << 2;
static const uint32_t ballCategory3 = 0x1 << 3;
//这是我修改后的联系方式
- (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");
}
}
-(void)didBeginContact:(skphysiccontact*)联系人
{
SKPhysicsBody*第一个Body,*第二个Body;
if(contact.bodyA.categoryBitMask
但还是什么都没发生。有人在spriteKit中处理过碰撞吗。只想在两个不同的sprite节点接触时播放声音。首先,您没有设置任何
contactTestBitMasks
。目前,您正在告诉物理代理哪些节点设置为相互碰撞,但没有设置为接触。将其添加到每个球体physicsBody:
ball2.physicsBody.contactTestBitMask = ballCategory | ballCategory2 | ballCategory3
这样,物理学员将了解每个球都可以与其他球接触
如果语句仍被错误使用,请联系ballCategory
和BallCategory2
是等同于整数的变量;这意味着您的categoryBitMask
现在设置为等于这些整数
您的if
语句所做的是检查physicsBody的类别是否等于一个特定的整数,或者仅仅等于一个大于零的整数(由您决定)
在这种情况下,您需要调整if
语句来测试您设置的categoryBitMask
s的值:
if ((firstBody.physicsBody.categoryBitMask == ballCategory) &&
(secondBody.physicsBody.categoryBitMask == ballCategory2))
{
NSLog(@"click");
}
你所拥有的是不正确的,因为你没有测试任何东西的价值。您需要使用if
语句检查firstBody
和secondBody
是否有categoryBitMask
设置为等于特定ballcegory
变量值。谢谢您的回答。我更改了我原来的帖子以向您提供更多信息。@user1114881我也更新了我的答案。你需要对如何设置物理机构、物理代理以及如何测试联系进行更多的研究。你可以使用播放声音文件。您需要将声音文件添加到应用程序包中。
if ((firstBody.physicsBody.categoryBitMask == ballCategory) &&
(secondBody.physicsBody.categoryBitMask == ballCategory2))
{
NSLog(@"click");
}