我正在尝试这个东西,但是在下一个方法中有运行时错误,即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
}
Thanks for the Advice in Advance
您的选择器不使用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];
}
唯一可能的原因是chgcard1在早些时候的某个地方过度释放了。我从未使用过Cocos,但是如果你没有源代码并且使用静态库,那么只需创建CCSprite的类别并覆盖dealloc方法(这是临时的,只是为了查看何时为该对象调用它)。如果你正在使用Cocos源代码构建,那么只需在那里创建一个断点。