2012-04-07 1 views
0

읽어 주셔서 감사합니다.CCLayerPanZoom 및 CCRenderTexture를 사용할 때 CCSprite 자식 좌표 변환에 실패합니까?

무료로 패닝 및 확대/축소가 가능한 장면에서 거대한 CCLayerPanZoom이있는 Cocos2D 1.x의 설정 작업을하고 있습니다. 모든 프레임에서 "어둠"을 만들기 위해 위에 CCRenderTexture를 그려야합니다 (나는 빛을 차단합니다). 잘 작동합니다.

이제 표면에 단일 스프라이트를 추가했으며 Box2D에서 관리합니다. 그것도 잘 작동합니다. 광원이 있어야하는 RenderTexture로 변환 할 수 있으며 렌더링이 잘됩니다.

그런 다음 CCLayer를 장면에 추가하여 위에 HUD 레이어를 추가하고 싶습니다. 이 레이어는 사용자 인터페이스 요소로서 여러 스프라이트를 쌓아 올릴 필요가 있습니다.

이러한 요소는 모두 내가 필요한 곳에 그려지지 않습니다. 정확히 화면 중앙에 있습니다. HUD 레이어에 추가 된 스프라이트는 모두 꺼져 있고 거의 모든 변형 "convertToWorldSpace", "convertToNodeSpace"등을 반복했습니다.

백그라운드에서 CCPanZoomLayer에 의한 상수 크기 조절이 앵커에서 벗어난 것처럼 보입니다. 각 프레임 위의 레이어에 점을 표시하고 재설정하면 도움이되지 않습니다. 그것들은 모두 노드 바운딩 박스의 모서리 중 하나에 디폴트로있는 것처럼 보입니다. 마치 변이가 막히거나 그림을 볼 때 제로로 설정되는 것처럼 말입니다.

누구에게이 문제가 발생 했습니까? CCLayerPanZoom을 사용하고 각 프레임 상단에 사용자 정의 CCRenderTexture를 그릴 때 알려진 문제입니까?

답변

0

하! 범인을 찾았 어! Zwoptex 데이터를 사용하는 Cocos2D의 버그에 버그가 있습니다. (저는 Cocos2D v 1.0.1을 사용하고 있습니다).

Zwoptex v3 데이터를로드 할 때 실제 스프라이트 프레임 고정 점을 계산할 때 스프라이트 프레임의 트림 오프셋 데이터가 무시되는 것 같습니다. 그 효과는 정의에 트림 오프셋이있는 스프라이트상의 앵커 포인트 (예 : plist)가 앵커 포인트가 올바르게 설정되어 있지 않다는 것입니다. 정말 이상 해요 ...이게 다른 사람에게 일어 났는지 궁금하네요? 눈부신 문제입니다.

재현하는 방법은 다음과 같습니다. zwoptex v3 형식 (트림 데이터를 사용하는 형식)으로 스프라이트 프레임에 대한 데이터를 만듭니다. 실제로 트림 된 스프라이트가 있는지 확인하십시오. 즉, 오프셋은 0보다 커야하며 이미지 크기는 소스보다 커야합니다. 스프라이트에로드하고 화면 중앙에 배치합니다. 꺼져있는 것을 볼 수 있습니다. 여기에 제대로 고정 점을 계산하는 방법은 다음과 같습니다

 CCSprite *floor = [CCSprite spriteWithSpriteFrameName:@"Menu_OmeFloor.png"]; //create a sprite 
     CCSpriteFrame *frame=[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"Menu_OmeFloor.png"]; //get its frame to access frame data 
     [floor setTextureRectInPixels:frame.rect rotated:frame.rotated untrimmedSize:frame.originalSizeInPixels]; //re-set its texture rect 
     //Ensure that the coordinates are right: Texture frame offset is not counted in when determining normal anchor point: 
     xa = 0.5 + (frame.offsetInPixels.x/frame.originalSizeInPixels.width); 
     ya = 0.5 + (frame.offsetInPixels.y/frame.originalSizeInPixels.height); 
     [floor setAnchorPoint:ccp(xa,ya)]; 
     floor.position=(where you need it); 

가 XA에서 0.5/바꾸기 나중에 공식 당신의 필수 앵커 포인트 값으로.

+0

hm 저는 오랫동안 Cocos 1.x와 Zwoptex를 사용 해왔고이 문제에 대해서는 전혀 다루지 않았습니다. – johnbakers

+0

안녕하세요 앤드류 - SpriteBatchNodes를 사용하고 CCLayerPanZoom을 통해 크기를 조정하고 있습니까? 제가 설명했듯이, 그것은 단순한 프로젝트에서도 나에게 일어나지 않습니다. 그러나 이것은 더 이상 간단하지 않습니다. – Averett