2013-04-17 5 views
0

CCSpriteBatchNode를 사용하여 한 번에 한 픽셀 씩 (1x1 견본을 사용하여) 기본적으로 선을 그립니다. 사용자가 라인이 실시간으로 이동하는 곳을 제어하기 때문에이 작업을 수행해야합니다 (그리기 앱이 아니지만 필자가 뭘하는지는 필적 할 것 같습니다).CCSpriteBatchNode가 약 15k에서 어린이 추가를 중단합니다.

내가 15-16k 아이들을 batchNode에 추가하면 새로운 아이들을 등록하는 것이 중단된다는 것이 밝혀졌습니다. 기본적으로 펜에 잉크가 없어 졌던 것처럼 보입니다!

나는 cocos2d 코드를 조금 찔렀다.하지만 아무 문제가없는 것처럼 보인다. 새 자식 노드 등록을 중지합니다. 아무도 이것이 왜 있는지 압니까?

모든

답변

1

먼저, 나를 진정으로 거대한 삼가의 방법으로이 말을하자

아야!

다음은 기술적 인 이유입니다. 스프라이트는 16.384 개를 배치하자 마자 렌더링되지 않습니다. 각 스프라이트는 스프라이트를 화면에 렌더링하기 위해 쿼드 (4 개의 꼭지점)를 사용하기 때문에 배치 작업 당 버텍스 한계 65.536 개를 맞았습니다.

배치 작업 당 더 많은 정점이 그려지지 않습니다(). 이는 기술적 인 제한 사항입니다. 추가 스프라이트를 만들기 위해 다른 CCSpriteBatchNode를 사용할 수도 있습니다.하지만 진지하게 여기서 아무데도 갈 길이 없습니다.

선을 그려야하는 것이 필요한 경우 아마도 이것은 내가 생각할 수있는 최악의 접근 방법 일 것입니다. 선 그리기 (ccDrawLine), 개별 픽셀 (ccDrawPixel도 존재하지만 15k 픽셀은 대단히 느릴 것입니다) 또는 셰이더를 사용하여 동일하거나 유사한 효과를 얻으십시오. CCDrawNode를 사용하여 cocos2d 2.1을 사용하여 그리기 프리미티브를 배치 할 수도 있습니다.

YETIPIPI에서 성공적으로 사용한 다른 솔루션 중 하나는 제한된 수의 스프라이트, 예를 들어 20에서 200까지를 사용하여 CCRenderTexture에 그려주는 것입니다. 새 스프라이트를 추가 할 때마다 가장 최근에 사용되지 않은 스프라이트가 다시 사용됩니다. 렌더 텍스처를 지우지 않으면 훨씬 적은 수의 스프라이트로 계속 그릴 수 있습니다. 불투명도가 낮은 스프라이트를 그리면 해당 영역을 더 불투명하게 만들기 위해 더 오랜 시간 동안 동일한 위치에서 그리기의 효과를 얻을 수도 있습니다.

+0

감사합니다. 매우 알아두면 좋습니다! 흥미롭게도이 기술은 실제로 한계에 도달 할 때까지 지금까지 극도의 성능을 발휘했습니다. 필자는 스프라이트를 CCRenderTexture에 그려서 재사용 할 수있는 아이디어를 좋아합니다. 비록 내가 다른 드로잉 시간에 픽셀 크기를 변경하면 문제가있을 것입니다 궁금해 ... –