2013-05-13 1 views
1

저는 다이빙을하고 cocos2d를 배우려고합니다. 현재 버튼 인쇄기에서 타일셋을 바꾸려고합니다.런타임 동안 타일 세트를 바꿔 주시겠습니까? TMX Cocos2d-iPhone

예 : 플레이어가 버튼을 누르면, 잔디에 서있다, 그리고 타일셋은 눈 텍스처로 변경됩니다.

나는지도를 만들기 위해 타일을 사용하고 난 그냥 타일을 표시하기 위해 사용하는 타일 이미지 시트를 전환 할 수있을 것이라고 기대했다.

이미지 시트는 사람이 어떤 조언이나 입력이있는 경우

, 나는 그것을 대단히 감사하겠습니다 .. 동일한 이미지 위치와 동일한 크기입니다! :)

+0

코드 수정 없이는이 작업을 수행 할 수 없다고 생각합니다. http://www.koboldtouch.com을 시도해보십시오. 스 타일링 타일셋을 사용할 수 있으며 훨씬 더 많이 사용할 수 있습니다. – LearnCocos2D

답변

2

타일 세트를 사용하는 CCTMXLayer 클래스는 CCSpriteBatchNode에서 상속됩니다. CCTMXLayer에게 새로운 타일셋의 텍스처를 가진 setTexture : 메시지를 보내려고 할 수 있습니다.

그러나 단지이 문제가 될 것이다 영역이있는 코드를 감추고. 예를 들어 텍스처를 설정하면 현재 배치 노드의 자식 노드 인 타일의 텍스처가 변경되지 않으므로 렌더 노드가 실패하거나 배치 노드와 다른 텍스처를 사용하기 때문에 문제가 발생합니다. 모든 스프라이트의 텍스처를 동시에 업데이트 할 수는 있지만 배치 노드 나 스프라이트의 텍스처가 변경되는지 여부는 배치 노드의 텍스처와 다르고 오류가 발생하기 때문에 작동하지 않을 것이라고 생각합니다.

한 가지 방법은 전체 CCTMXLayer를 제거하고 새 것으로 교체하는 것으로 보인다. 그러나 CCTMXLayer는 내부적으로 만 사용되는 구조로 초기화되며 최소한 일부는로드시에만 사용할 수 있습니다. 그래서 결국 일반 cocos2d에서 타일셋을 대체하는 유일한 방법은 전체 CCTMXTiledMap 노드를 교체하는 것입니다. 이는 어떤 단순한 오버 헤드를 의미합니다.

잔디 타일과 스노우 타일을 동일한 타일 세트에 추가하고 타일 GID를 변경하면됩니다.

내가 언급 한 바와 같이, KoboldTouch allows changing tilesets at runtime. KoboldTouch 자체가 렌더러로 cocos2d-iphone을 사용하고 있습니다.

+0

답장을 보내 주셔서 감사합니다! GID 옵션을 살펴 보았습니다. GID 옵션은 제가 고려해야 할 사항 일 수 있습니다. 가장 깨끗한 것 같아서 가능한 모든 버그를 피하고 싶습니다. :) – JoeyMaru