У меня есть слой cocos2d с именем ChoosePlayer
и в методе init
. Я добавляю несколько спрайтов с помощью [self addChild:]
. Его равнина и работает правильно. Но когда я пытаюсь сделать то же самое в другом методе, как указано ниже, ее не работает:Цель - C: `self` не отвечает
-(void) avatarchanged {
[self addChild:[CCSprite spriteWithFile:@"av1.png"]];
[self runAction:[CCMoveBy actionWithDuration:1.0 position:ccp(100, 100)]];
NSLog(@"added new avatar");
}
[self runAction:]
также не отвечает. Поэтому я думаю, что это не проблема со спрайтом, а с самим self
.
Между init
и avatarchanged
, что я делаю, показывая UIView на вершине OPENGL View, выполнить некоторые действия там и вернуться обратно следующим образом:
-(void) selectAvatar {
CGSize winSize = [CCDirector sharedDirector].winSize;
flowCoverView = [[[FlowCoverView alloc] initWithFrame: CGRectMake(0, 0, 480, 320)] autorelease];
flowCoverView.center = ccp(-80 + winSize.width/2, 80 + winSize.height/2);
flowCoverView.delegate = self;
flowCoverView.transform = CGAffineTransformMakeRotation(90*(3.14/180));
[[CCDirector sharedDirector].openGLView.window addSubview:flowCoverView];
}
Когда необходимые действия выполняются, flowCoverView удаляются следующим образом:
- (void)flowCover:(FlowCoverView *)view didSelect:(int)cover {
selectedavat = cover;
[flowCoverView removeFromSuperview];
[[NSNotificationCenter defaultCenter] postNotificationName:@"avatarchanged" object:nil];
}
уведомления размещено выше вызывается мой avatarchanged
метода, где self
не отвечает.
Edit: вот мой init
метод:
-(id) init {
if((self=[super init])) {
self.isTouchEnabled = YES;
BG = [CCSprite spriteWithFile:@"opponent.jpg"];
BG.scale *= CC_CONTENT_SCALE_FACTOR() * 1;
BG.position = ccp(240,160);
[self addChild:BG];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(avatarchanged) name:@"avatarchanged" object:nil];
}
return self;
}
Примечание: В моем проекте есть куча глобальных переменных, объявленные с помощью extern
, они могли бы что-то делать с моей проблемой, но я не уверен.
Не могли бы вы помочь мне с этим?
Edit 2: изменена avatarchanged
следующим образом:
-(void) avatarchanged {
if (self == nil) {
NSLog(@"self is nil!!!!!!!!");
} else {
NSLog(@"pheww.. its not nil");
}
if (self.isRunning) {
NSLog(@"running");
} else {
NSLog(@"not running");
}
[BG runAction:[CCRotateBy actionWithDuration:1.0 angle:100.0]];
[self addChild:[CCSprite spriteWithFile:@"av1.png"]];
NSLog(@"added new avatar");
[self runAction:[CCMoveBy actionWithDuration:1.0 position:ccp(100, 100)]];
}
журнала показывает, как
2012-03-26 11:16:21.213 Funsip[1550:207] pheww.. its not nil
2012-03-26 11:16:21.214 Funsip[1550:207] running
2012-03-26 11:16:21.224 Funsip[1550:207] added new avatar
runAction БГ является также не получает прикладной, но делает то же самое в init
метод отлично работает правильно.
Редактировать 3: FlowCoverView, который я добавляю, реализован с помощью вызовов OpenGL изнутри. Может быть, это может вызвать конфликты с настройкой состояний OpenGL в cocos2d. Но я не знаю OpenGL, чтобы искать такие проблемы. Вот ссылка на страницу, где я снял обзор потока с http://www.chaosinmotion.com/flowcover.html
где '- (Недействительными) avatarchanged' объявлен? – giorashc
Что значит «его не работает» и «тоже не отвечает»? Происходит ли NSLog? – yuji
Не могли бы вы показать свой метод init? –