Ошибка @selector нескольких аргументов с CCCallFunc - PullRequest
1 голос
/ 24 ноября 2011

Я пытаюсь это сделать, но в следующем методе есть ошибка времени выполнения, т.е. 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
}

Спасибо за совет заранее

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

Ваш селектор не использует параметры, требуемые для 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 голос
/ 24 ноября 2011

Единственная возможная причина в том, что chgcard1 был переиздан где-то ранее. Я никогда не использовал Cocos, но если у вас нет исходного кода и статической библиотеки, просто создайте категорию CCSprite и переопределите метод dealloc (это временно, чтобы увидеть, когда он вызывается для этого объекта). Если вы строите с использованием источников Cocos, просто создайте там точку останова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...