我有一个物体(球)与地面接触:该球的弹力很强,与地面的接触可能超过7次。

我利用categoryBitMask和contactTestBitMask并在-(void)didBeginContact:(SKPhysicsContact *)contact中很好地设置了所有内容。

我创建了一个属性SKAction来处理声音效果,并为该 Action 分配了一个音频文件:

 self.sfxBounce1 = [SKAction playSoundFileNamed:@"bounce1.caf" waitForCompletion:NO];

我在didBeginContact中调用此sfxBounce1。关键是一切都很好。除了一个问题是我的球会弹跳很多外,但出于个人原因,我需要auddio / SKAction在球接触地面3次后停止播放。

在游戏中,球仍在3次跳动后反弹,只是我需要声音才能停止比赛。

但是,因为代码在didBeginContact方法的IF语句中,所以音频在每次与地面接触后都会继续播放。我在编程方面仍然很绿,尤其是使用Objective-C时。

下面是一些代码
-(void)didBeginContact:(SKPhysicsContact *)contact
{
    if ((firstBody.categoryBitMask == ballCategory) && (secondBody.categoryBitMask == groundCategory))      //Ball & Ground contact
{
    int random = arc4random() %6; //Random # generator of 7 possibilites.

    switch (random) //Generated # represents a case, which in turn initiates a bounce sound upon contact.
    {
        case 0:
            [self runAction:self.sfxBounce1];
            break;
        case 1:
            [self runAction:self.sfxBounce2];
            break;
        case 2:
            [self runAction:self.sfxBounce3];
            break;
        case 3:
            [self runAction:self.sfxBounce4];
            break;
        case 4:
            [self runAction:self.sfxBounce5];
            break;
        case 5:
            [self runAction:self.sfxBounce6];
            break;
        case 6:
            [self runAction:self.sfxBounce7];
            break;
    }

    [self deleteNode];
}

我不知道在6种情况下(在[self runAction:self.sfxBounce1];&break;之间)应该键入什么代码,这会在经过一定数量的弹跳/接触地面后停止 Action 。

最佳答案

在@interface的顶部创建一个int,您可以在整个代码中进行引用:

property (nonatomic) int bounceCount;

这是didBeginContact的更新版本:
-(void)didBeginContact:(SKPhysicsContact *)contact
{

if ((firstBody.categoryBitMask == ballCategory) && (secondBody.categoryBitMask == groundCategory))      //Ball & Ground contact
{
    self.bounceCount++;
    if(self.bounceCount>3)
       return;

     //Your Code

}
}

关于objective-c - Sprite Kit的接触计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26511046/

10-09 21:26