我正在尝试这个东西,但在下一个方法中有运行时错误,即changeCardsfirst2我无法找到出错的地方。请建议我这个错误
-(void) changeFirst2Cards : (CCSprite *) chgcard0 :(CCSprite *) chgcard1
{
id a1 = [CCDelayTime actionWithDuration:0.5f];
id a2 = [CCCallFunc actionWithTarget:self selector:@selector(changeCardsfirst2:data:) ];
id action = [CCSequence actions:a1,a2,nil];
[self runAction:action];
}
-(void) changeCardsfirst2 : (id) sender data:(CCSprite *)chgcard1
{
[chgcard1 runAction:[CCMoveTo actionWithDuration:0.5f position:ccp(145,wSize.height-110)]]; // Error for EXEC_BAD EXCCESS
}
感谢提前建议
答案 0 :(得分:3)
您的选择器不使用CCCallFunc所需的参数 - 它应该没有参数。 CCCallFuncN将以节点作为其第一个参数运行选择器,CCCallFuncND将运行带有节点的选择器和任意void *指针作为其第二个参数。
你应该使用CCCallFuncN:
id a2 = [CCCallFuncN actionWithTarget:self
selector:@selector(changeCardsfirst2:)];
并相应地更改选择器以使用节点:
-(void) changeCardsfirst2:(CCNode*)chgcard1
{
id move = [CCMoveTo actionWithDuration:0.5f
position:ccp(145,wSize.height-110)];
[chgcard1 runAction:move];
}
答案 1 :(得分:1)
唯一可能的原因是chgcard1早先在某处被过度释放。 我从来没有使用过Cocos,但是如果你没有源代码并使用静态库,那么只需创建CCSprite的类别并覆盖dealloc方法(这只是为了查看它何时被调用此对象)。如果您正在使用Cocos源构建,那么只需在那里创建一个断点。