Звуковые эффекты вкл / выкл в спрайтеките

В gameScene.m о том, как мы можем включать / выключать музыку с помощью skspritenode во время игры, с помощью приведенного ниже кода я могу отлично воспроизводить звуки, но я хочу, чтобы при включении или выключении звуков в игре пользователь мог включить или выключить звуки Ipad.

//.h file
#import <SpriteKit/SpriteKit.h>
@interface MyScene : SKScene


//.m file
#import "MyScene.h"
#import <AVFoundation/AVAudioPlayer.h>
@interface MyScene() <SKPhysicsContactDelegate>
@end

@import AVFoundation;

@implementation MyScene 
{AVAudioPlayer *_AudioPlayer;}



-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (_gameLayer.speed > 0) {
    //for flying plane
    _playerPlane.physicsBody.velocity = CGVectorMake(0, 0);
    [_playerPlane.physicsBody applyImpulse:CGVectorMake(0, 14)];
    [self jumpsound]; 
}
-(void)didBeginContact:(SKPhysicsContact *)contact{
       _gameLayer.speed = 0;
        [self removeAllActions];
       skspritenodeGameOver.hidden = NO;
       [self hitSound];}

- (void)jumpsound
{
NSURL *file = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"jump" ofType:@"wav"]];
_AudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];

[_AudioPlayer setVolume:0.5];
[_AudioPlayer play];  
}

- (void)hitsound
{
  NSURL *file = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"jump" ofType:@"wav"]];
_AudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];

[_AudioPlayer setVolume:0.5];
[_AudioPlayer play];  
}
@end

1 ответ

Решение

Чтобы добавить звуковые эффекты в вашу игру, я предлагаю использовать playSoundFileNamed SKAction вместо AVAudioPlayer. Вот пример того, как это сделать:

@property BOOL playSounds;

// Define action to play a sound effect
_playJumpSound = [SKAction playSoundFileNamed@"jump.wav" waitForCompletion:NO];

// Play sound effect only if playSounds is set
if (_playSounds) {
  [self runAction:_playJumpSound];
}

РЕДАКТИРОВАТЬ: Добавить звуки к методам. Звук будет воспроизводиться только если _playSounds == YES.

- (void) playJumpSound
{
    if (_playSounds) {
        [self runAction:_playJumpSound];
    }
}

- (void) playHitSound
{
    if (_playSounds) {
        [self runAction:_playHitSound];
    }
}
Другие вопросы по тегам