Sì, non sono sicuro di capire la differenza. Perché è possibile specificare l'oggetto di destinazione anche utilizzando CCCallFunc.qual è la differenza tra CCCallFunc e CCCAllFuncN
6
A
risposta
10
CCCallFuncN passa il CCNode che hai chiamato l'azione al metodo. Per esempio, se è necessario eseguire un'azione che rimuove il nodo dal suo genitore è possibile utilizzare CCCallFuncN e poi detto metodo sarebbe simile a questa:
-(void)theCalledMethod:(CCNode *)thePassedNode
{
[thePassedNode.parent removeChild:thePassedNode];
}
Se è stato utilizzato un CCCallFunc invece si dovrebbe tenere un riferimento alla detto nodo per poterlo recuperare in seguito e rimuoverlo nel metodo chiamato.
La differenza di comportamento tra questi due metodi è * estremamente * importante da ricordare. Recentemente, ho avuto un EXC_BAD_ACCESS in un callback che mi stava facendo impazzire; Gli strumenti non sono riusciti a trovare nessuno Zombi e le poche conserve che mi erano sembrate corrette. Ho scoperto che stavo invocando il mio callback con CCCallFunc() invece di CCCallFuncN(). Poiché CCCallFunc() non passa il CCNode direttamente alla richiamata, i tentativi di callback di operare sul mittente hanno causato il blocco della mia app. È incredibile come una "N" possa essere la differenza tra un'app che si schianta e una perfettamente funzionante. – Blackcoat