2011-11-24 20 views
1

我正在嘗試這個東西,但在下一個方法中有運行時錯誤,即changeCardsfirst2我無法找到出錯的地方。請建議我爲這個錯誤@selector multiple CCCallFunc的參數錯誤

-(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 
} 

謝謝你的建議提前

回答

1

唯一可能的原因是,chgcard1結束髮行的地方更早。 我從來沒有使用Cocos,但是如果你沒有源代碼並使用靜態庫,那麼只需創建CCSprite的類別並覆蓋dealloc方法(這只是暫時的,以查看何時調用此對象) 。如果您使用Cocos源代碼構建,那麼只需在那裏創建一個斷點。

+1

斷點它給出了一個錯誤後changeCardsfirst2方法下進入並停止執行它 – Marine

+0

當然,它崩潰。主要目的是檢查回溯,看看爲什麼調用dealloc。 – Max

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]; 
} 
+0

我需要更改Sprite的位置,但它會將整個場景更改爲特定位置。我可以得到精靈而不是整個節點嗎? – Marine