【问题标题】:SpriteKit properly handling soundsSpriteKit 正确处理声音
【发布时间】:2014-06-10 08:10:08
【问题描述】:

我有一个 SpriteKit 游戏,其中有许多不同的 Sprite 激光、飞机等。其中许多 Sprite 有声音,只要它们可见就会播放。现在我在 SKSpriteNode 本身中播放声音。这可能不是我想要的,因为如果我有 50 个相同的精灵,它们都会播放相同的声音并占用资源。但是,我不确定在哪里播放声音的最佳位置,因为对于其中一些精灵,我需要检查它是否应该播放。我想我可以将声音放在 GameScene 中,并在每次更新期间循环遍历所有精灵,以确定应该播放和不应该播放的声音,这样每个声音只有一个实例。我希望将所有精灵代码保留在精灵本身中,但这将解决同一声音播放的多个实例的问题。这是处理声音的正确方法吗?

【问题讨论】:

  • 你到底在问什么?您是否在询问是否有多个精灵 A 在视野中,然后只播放声音 B 一次?请举一个具体的例子。
  • 是的,这就是我正在寻找的答案,所以如果我在屏幕上有 50 个相同的精灵,我不想让每个精灵播放相同的声音。我只想为所有 50 个精灵播放一次声音,而不是每个精灵都尝试同时播放相同的声音。举个例子,如果我有 50 架飞机,我不想播放 50 种螺旋桨声音,只播放一个。

标签: ios sprite-kit audio


【解决方案1】:

如果没有看到您的代码,很难给您一个合适的代码示例。但是,您可以通过下面的内容了解您可以尝试的内容。

在 MyScene 中添加属性BOOL propSound

每当您创建一个新飞机并想知道添加道具声音时,请执行以下操作:

if(propSound == false)
{
    propSound = true;
    // add your code to play prop sound
}

如果您将每个新创建的平面精灵添加到像 [yourArrayName addObject:newPlane]; 这样的 NSMutableArray 中,您可以在每次移除平面时检查数组计数,以便了解最后一个平面是否被移除以及是否需要停止声音。

if([yourArrayName count] == 0)
{
    propSound = false;
    // add your code to stop prop sound
}

【讨论】:

  • 这就是我一直在寻找的,如果我应该将声音代码移动到场景而不是节点本身,场景可以检查是否应该播放特定精灵类型的任何实例一个声音,如果他们正在播放或继续播放,如果没有,停止声音。谢谢!
【解决方案2】:

也许您正在寻找类似的东西?

NSMutableArray *coin = [[NSMutableArray alloc] initWithCapacity:1];
SKAction *_coinSound = [SKAction playSoundFileNamed:@"Pickup_Coin4.wav"   waitForCompletion:NO];
    [coin addObject:_coinSound];
    SKAction *_playCoinSound = [SKAction sequence:coin];

然后我只检查我的案例中的“角色”是否接触了硬币。如果是这样,它将播放声音。

if([_adventurer intersectsNode:coin]){
            [coin runAction:_playCoinSound];
}

编辑:

看到您对您的问题的评论。我想您可以检查屏幕上是否至少有 1 架飞机,如果有,那么您可以播放声音循环。如果少于 1 则没有声音。

如果已经在播放相同的声音,请不要再次播放。您可以使用 BOOL 来查看声音是否已经在播放。

BOOL isPlaneSoundOn = false;

if(!isPlaneSoundOn && _planeNode.count > 0){
 //play the sound
 isPlaneSoundOn = true;
} else if(_plane.count == 0) {
 //stop the sound
 isPlaneSoundOn = false;
}

类似的东西。也许你明白了:)

【讨论】:

  • 播放声音不是问题,问题是如果我有多个发出恒定声音的精灵,比如飞机上的螺旋桨,我不希望每个精灵都播放和实例相同的声音和资源,我只想播放一次。
【解决方案3】:

我会使用 SKAction playSoundWithFilename 亲自在场景外播放任何社区声音,并为该声音分配一个键。

然后我会检查密钥是否存在,如果不存在,则播放声音

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多