@selector使用CCCallFunc时出现多个参数错误



我正在尝试这个东西,但是在下一个方法中有运行时错误,即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源代码构建,那么只需在那里创建一个断点。

最新更新