2013-10-05 3 views
0

나는 objective-c로 cocos2d를 사용하여 간단한 게임을 쓰고 있습니다. 이 게임에서는 적의 스프라이트에 임의의 위치를 ​​부여합니다. 서로 다른 겹치는 것을 피하기 위해 새로운 스프라이트의 CGRect가 임의의 위치에있는 스프라이트가 다른 스프라이트의 CGRect와 겹치지 않는지 확인합니다.초기화되기 전에 CCSprite의 크기를 얻는 방법은 무엇입니까?

제 질문은 새 스프라이트를 초기화하기 전에 어떻게 CGRect의 크기를 얻을 수 있습니까? 그리고 ccbi 파일 (cocosbuilder)을 사용하여 스프라이트를 초기화하는 경우 어떻게합니까?

이전에했던 것은 새로운 스프라이트를 초기화하기 전에 임시 스프라이트를 적의 첫 번째 프레임 (모든 프레임의 크기가 동일 함)을 보여주는 png 파일로 초기화하는 것입니다. 그런 다음 크기를 tempSprite.boundingBox와 같이 사용하십시오. 그것이 잘 작동하지만, 나는 새로운 모든 적의 스프라이트를 초기화하기 전에 tempSprite를 만드는 것이 효율적이지 않다고 생각합니다.

이제 cocbi 파일을 사용하면 애니메이션 조정이 더 쉬워 져서 cocosbuilder를 사용하여 게임을 변환하려고합니다. 초기화하기 전에 스프라이트의 크기를 어떻게 알 수 있습니까? 난 여전히 [CCBReader nodeGraphFromFile : @ "enemySprite.ccbi"]를 사용하여 tempSprite를 만들고 tempSprite.boundingBox를 사용하여 크기를 얻을 수 있다고 생각합니다. 그러나 그것을하는 것이 올바른 방법일까요? 그것은 CPU 및 메모리 자원에 대해 매우 낭비합니다. 업데이트 : 나는 작동하지 않는 길을 시도했다. boundingBox 크기 값이 (0,0)이므로 (위치 값이 올바름)

+0

스프라이트가 이미 일괄 처리되고 캐시되어 있습니까? 그렇다면 크기를 얻기 위해 초기화 할 추가 자원이 필요하지 않습니다. –

+0

예, 예를 들어 첫 번째 프레임 인 png 파일에서 올바른 크기를 얻을 수 있습니다. 그러나 나는 또 다른 문제가 있었다. ccbi 파일의 크기가 0이기 때문에 나는 그것을 만질 수 없습니다 (텍스처를 만지는 것은 '만지기'로 간주되지 않습니다). – ArtS

답변

0

혼자서 해결책을 찾았습니다. 이 문제는 ccbi 파일로 만든 인스턴스의 구조를 잘못 이해했기 때문에 발생합니다. 단순히 CCSprite 대신 CCSprite를 변수로 사용하는 CCNode입니다. CCNode의 크기는 (0,0)이며 (CCSprite의 컨테이너로 작동 함) CCSprite는 올바른 크기와 올바른 위치를가집니다.

CocosBuilder에서 CCSprite * 변수를 사용하여 CCSprite를 할당했습니다. 그리고 충돌을 검사하기 위해 CCSprite.boundingBox를 사용하십시오. 이것은 모든 문제를 해결합니다.