【发布时间】:2014-10-22 15:20:23
【问题描述】:
我有一个物体(球)接触地面:球非常有弹性并且接触地面超过 7 次。
我已经使用 categoryBitMask 和 contactTestBitMask 并在 -(void)didBeginContact:(SKPhysicsContact *)contact 中很好地设置了所有内容。
我创建了一个属性 SKAction 来处理音效并将一个音频文件分配给该动作:
self.sfxBounce1 = [SKAction playSoundFileNamed:@"bounce1.caf" waitForCompletion:NO];
我在 didBeginContact 中调用了这个 sfxBounce1。关键是一切都很好。除了一个问题是我的球弹跳很多,但出于个人原因,我需要在球接触地面 3 次后停止播放音频/SKAction。
在游戏中,球在 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; 之间)分别输入什么代码,这将在一定数量的反弹/与地面接触后停止动作.
【问题讨论】:
-
感谢您编辑我的问题 LearnCocos2D
标签: objective-c audio sprite-kit xcode6 skaction