2010-07-26 6 views

Odpowiedz

10

CCCallFuncN przekazuje do węzła CCNode, który wywołał akcję, metodę. Na przykład, jeśli chcesz uruchomić akcję, która usuwa węzeł z jego rodzica można użyć CCCallFuncN a następnie wspomniany sposób będzie wyglądać następująco:

-(void)theCalledMethod:(CCNode *)thePassedNode 
{ 
    [thePassedNode.parent removeChild:thePassedNode]; 
} 

Jeśli użyto CCCallFunc zamiast trzeba by zachować odniesienie do węzeł, aby móc go później pobrać i usunąć w wywołanej metodzie.

+1

Różnica w zachowaniu między tymi dwiema metodami jest * niezwykle * ważna do zapamiętania. Ostatnio miałem EXC_BAD_ACCESS w wywołaniu, które doprowadzało mnie do szału; Instrumenty nie mogły znaleźć żadnych zombie, a kilka z nich zachowało się tak, jak mi się wydawało. Okazało się, że wywołałem moje wywołania zwrotne z CCCallFunc() zamiast CCCallFuncN(). Ponieważ CCCallFunc() nie przekazuje CCNode bezpośrednio do twojego wywołania zwrotnego, próby wywołania zwrotnego działające na nadawcę powodują awarię mojej aplikacji. To niesamowite, jak "N" może być różnicą między zawieszającą się aplikacją a doskonale działającą. – Blackcoat

Powiązane problemy