2010-12-09 6 views
2

cocos2d-iphone의 아이소 메트릭 타일링 된지도 z 순서 지정 예제에서는 타일 맵에 이미있는 개체를 플레이어 스프라이트로 사용하여 나무를 통해 움직이는 것으로 렌더링됩니다.Cocos2d 타일 된지도에서 스프라이트 추가

코드 (tmx 파일이 아니고 스프라이트 시트의 일부가 아닌)를 통해 생성 된 임의의 CCNode을 사용할 수 있습니까? 그리고 타일 맵과 함께 z 순서가 올바르게 지정되어 있습니까? addChild는 CCTMXLayer에서 지원되지 않으며 사용시 오류가 발생합니다 : 'addChild: is not supported on CCTMXLayer. Instead use setTileGID:at:/tileAt:'.

코코스 2D API 또는 일부 z 버퍼 기법을 사용하여 CCNode (간단히 CCSprite)의 타일 순서로 z 순서를 올바르게 지정할 수있는 방법이 필요합니다. 어떤 포인터?

답변

3

CCTMXLayer는 단일 스프라이트 시트에 모든 스프라이트로 구현 되었기 때문에 런타임에 타일 추가를 지원하지 않습니다. 이 구현 세부 사항 때문에 개별 타일에서 setTexture를 호출 할 수도 없습니다.

가장 쉬운 해결책은 처음에 스프라이트 시트에서 사용하려는 스프라이트를 사용하는 것입니다. 런타임시 또는 무언가로 생성 되었기 때문에이 작업을 수행 할 수 없다면, 다음으로 가장 좋은 것은 (cocos2d 코드를 건드리지 않고) 스프라이트 시트를 수정하는 것입니다.

TMXLayer에 사용중인 스프라이트 시트에 더미 타일을 놓은 다음 사용하려는 이미지가 있으면 CCRenderTexture 또는 다른 것을 사용하여 스프라이트 시트에 쓰고 새로 생성 된 텍스처를 TMXLayer의 텍스처로 사용하십시오 .

또한 CCTMXLayer를 수정하여 기능을 허용 할 수도 있지만 피하려고하는 것처럼 들릴 수 있습니다.

3

그런 다음 다음 코드를 사용합니다 (타일지도 편집기의 좌표 (X, Y)를) 타일 (X, Y)를 말할 타일을 추가하려면 -

myTileMap가 CCTMXTiledMap 객체에 대한 참조입니다.

CCTMXLayer *layer=[myTileMap layerNamed:@"yourlayer"]; 
NSAssert(floorLayer !=nil, @"Ground layer not found!");  
CGPoint tileAddPosition = [layer positionAt: CGPointMake(x,y)]; 

//Create your CCNode or CCSprite or whatever...say object name is **tileToBeAdded** 

tileToBeAdded.anchorPoint = CGPointZero; 
tileToBeAdded.position = tileAddPosition; 
[myTileMap addChild:addedTile z:1]; 
관련 문제