我有一个名为ChoosePlayer
的cocos2d图层和init
方法,我使用[self addChild:]
添加了一些精灵。它的朴素和正确的作品。但是,当我尝试下面给出这样做的另一种方法,它不工作:Objective-C:`self` not responding
-(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
之间,我做的是显示对OpenGL视图,顶一个UIView,执行某些操作那里和返回回如下:
-(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
没有响应:如下被去除。
编辑:这里是我的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
宣布,他们可能是与我的问题,但我不知道。
有人可以帮助我吗?
编辑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
的BG的runAction也没有得到应用,但在init
方法做同样的工作完全正确的。
编辑3: 我添加的FlowCoverView是在内部使用OpenGL调用实现的。可能会导致与cocos2d中的OpenGL状态设置冲突。但我不知道OpenGL寻找这些问题。 这里是我从http://www.chaosinmotion.com/flowcover.html
其中' - (无效)avatarchanged'声明? – giorashc 2012-03-25 09:07:48
你的意思是“它不工作”和“也没有回应”? NSLog是否发生? – yuji 2012-03-25 09:09:06
你可以显示你的init方法吗? – 2012-03-25 09:09:17