Хорошо, пора спросить. У меня есть метод в моем player.m
файле с именем musicOn
. Вот мои занятия. При запуске он воспроизводит музыку и во всех сценах, но мои кнопки в моем MainMenu
, чтобы отключить и на музыку, не работают. Что я делаю не так?Методы вызова из классов в комплекте Sprite?
Player.h
#import <Foundation/Foundation.h>
@interface Player : NSObject{
}
+ (Player *) musicOn;
+ (Player *) musicOff;
@end
Player.m
#import "Player.h"
#import <AVFoundation/AVFoundation.h>
@import AVFoundation;
@interface Player()
@property (nonatomic, strong) AVAudioPlayer * backgroundMusicPlayer;
@end
static Player *musicOff = nil;
static Player *musicOn = nil;
@implementation Player
//Music on Method.
+ (Player *) musicOn {
NSLog(@"Music on method called");
if (!musicOn) {
musicOn = [[super allocWithZone:nil]init];
//Play Music.
NSError *error;
NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:@"music" withExtension:@"wav"];
musicOn.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
musicOn.backgroundMusicPlayer.numberOfLoops = -1;
[musicOn.backgroundMusicPlayer prepareToPlay];
[musicOn.backgroundMusicPlayer play];
NSLog(@"Music on");
}
return musicOn;
}
//Music off Method.
+ (Player *) musicOff {
NSLog(@"Music off method called");
if (!musicOff) {
musicOff = [[super allocWithZone:nil]init];
[musicOff.backgroundMusicPlayer stop];
NSLog(@"Music off");
}
return musicOff;
}
//Overwriting allocWithZone.
+(id) allocWithZone:(NSZone *)zone {
return [self musicOn];
return [self musicOff];
}
//Overwriting init.
- (id) init {
self = [super init];
if (self) {
_backgroundMusicPlayer = self.backgroundMusicPlayer;
}
return self;
}
@end
MainMenu.m
//Calling the method from Player class.
[Player musicOn];
Журнал показывает этот
2014-01-16 21:23:04.010 Sprite Test[12582:60b] Music on method called
2014-01-16 21:23:04.035 Sprite Test[12582:60b] Music on
2014-01-16 21:23:04.065 Sprite Test[12582:60b] Music on
2014-01-16 21:23:04.068 Sprite Test[12582:60b] soundOn Called
2014-01-16 21:23:08.641 Sprite Test[12582:60b] Music off method called
2014-01-16 21:23:08.643 Sprite Test[12582:60b] Music off
2014-01-16 21:23:08.646 Sprite Test[12582:60b] Music off
2014-01-16 21:23:08.649 Sprite Test[12582:60b] soundOff Called
2014-01-16 21:23:09.304 Sprite Test[12582:60b] Music on method called
2014-01-16 21:23:09.306 Sprite Test[12582:60b] Music on
2014-01-16 21:23:09.307 Sprite Test[12582:60b] soundOn Called
вы создаете новые экземпляры вид контроллера, необходимо использовать ссылку на существующий. – LearnCocos2D
Узлы soundOn и soundOff не удаляются ... Вы обнаружите, что они добавляются друг к другу. – ZeMoon
@akashg Спасибо, я забыл удалить узел, когда отображается другой, я исправил это сейчас. Благодарю. Можете ли вы помочь с синглтоном? – Jason