나는 내 CCNodes가있는 NSMutableArray
을 가지고있다. [scene addChild:]
및 [CCNode removeFromParentAndCleanUp:YES]
을 사용하여 CCScene에 페인트 칠 및 페인트 칠을하고 싶습니다. 내 개체에 부모 개체가 있고 다른 개체에서 동시에 삭제 된 경우 검사 할 때 내 문제가 나타납니다. 이 코드를 볼 수 있으며, 항상 충돌 :CCNode가 Cocos2D 3.0에서 삭제 될 수있는 동안 부모를 가지고 있는지 확인
for(int y = negativeY; y < positiveY; y++){
for(int x = negativeX; x < positiveX; x++){
if([[self.rockArray objectAtIndex:y] objectAtIndex:x] != nil){ //checking if object is not null
if([[[self.rockArray objectAtIndex:y] objectAtIndex:x] parent] == nil){ //Crashes here!
NSLog(@"Rock is not visible. Painting it");
[listener addChild:[[self.rockArray objectAtIndex:y] objectAtIndex:x]];
}else{
NSLog(@"Rock is already visible.");
}
}
}
}
로그 메시지가
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull parent]: unrecognized selector sent to instance 0x351d6b0'
어쩌면 우리가 Semaphores
를 사용하여이 문제를 해결할 수있다? (그렇다면 목표 C에 예제를 게시 해 주시겠습니까?)
감사합니다!
그림
nil
포인터를 유지할 수 없기 때문에 확인하지 않아야합니다. 이것이 그 근원이 될 것입니다. – YvesLeBorg참고 ... cocos2d API의 사용자로서 코드는 주 스레드에서 모든 것을 실행하므로 실제로 '같은 시간에'같은 것이 없습니다 ... 세마포어는 문제를 찾는 솔루션이 될 것입니다. 풀다. cocos2d 앱에 스레드를 추가하는 것은 열려있는 GL 때문에 완전히 권장되지 않습니다. – YvesLeBorg
예, 내가 말했듯이 배열에는 NSNull 포인터가 있습니다. 문제는'[NSNull null] 대신에'nil '인지 검사하고 있었다. 고맙습니다. – aramusss