2010-07-26 36 views

Trả lời

10

CCCallFuncN chuyển CCNode mà bạn đã gọi hành động vào phương thức. Ví dụ, nếu bạn cần phải chạy một hành động mà loại bỏ các nút từ mẹ của nó, bạn có thể sử dụng CCCallFuncN và sau đó cho biết phương pháp sẽ trông như thế này:

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

Nếu bạn sử dụng một CCCallFunc thay vào đó bạn sẽ phải giữ một tham chiếu đến nút đã nói để có thể truy xuất nó sau và loại bỏ nó trong phương thức được gọi.

+1

Sự khác biệt về hành vi giữa hai phương pháp này là * cực kỳ * quan trọng cần nhớ. Gần đây, tôi đã có một EXC_BAD_ACCESS trong một cuộc gọi lại đã khiến tôi phát điên; Dụng cụ không thể tìm thấy bất kỳ Zombies, và rất ít người giữ lại tôi đã có tất cả dường như chính xác. Hóa ra là tôi đã gọi lại callback với CCCallFunc() thay vì CCCallFuncN(). Vì CCCallFunc() không chuyển trực tiếp CCNode tới cuộc gọi lại của bạn, các lần gọi lại của người gọi lại hoạt động trên người gửi đã làm hỏng ứng dụng của tôi. Thật tuyệt vời khi một 'N' có thể là sự khác biệt giữa một ứng dụng bị lỗi và hoàn toàn hoạt động. – Blackcoat

Các vấn đề liên quan