我有一个名为ChoosePlayer
的cocos2d图层,在init
方法中,我使用[self addChild:]
添加了一些精灵。它的简单和正常。但是当我尝试用下面给出的另一种方法做同样的事情时,它不起作用:
-(void) avatarchanged {
[self addChild:[CCSprite spriteWithFile:@"av1.png"]];
[self runAction:[CCMoveBy actionWithDuration:1.0 position:ccp(100, 100)]];
NSLog(@"added new avatar");
}
[self runAction:]
也没有回应。所以我猜它不是sprite的问题,而是self
本身。
在init
和avatarchanged
之间,我正在做的是在openGL View上显示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
获取flowcoverview的页面的链接答案 0 :(得分:2)
'self'是否处于运行模式(self.isRunning)?如果不是从cocos2d的观点来看也不会发生什么。将ChoosePlayer实例添加到正在运行的CCNode后代时,可以实现isRunning模式。如果您忘记将其添加到正在运行的节点,它将在绘图,操作等中被忽略......
答案 1 :(得分:1)