CCSequence에서 CCSprite의 ZOrder를 변경하는 방법을 알고 싶습니다. 다른 스레드에서 제안한대로 CCCallBlock을 사용하여 시도했지만 괴롭힘을 당했고 동일한 클래스의 다른 스프라이트를 중지합니다. 누군가가 제안 할 수있는 또 다른 방법이 있습니까?CCSequence에서 ZOrder를 변경하는 방법은 무엇입니까?
crystalEntryPoint = [self position];
float xD = [crystal position].x - crystalEntryPoint.x;
float yD = [crystal position].y - crystalEntryPoint.y;
CGPoint dest = ccp(crystalEntryPoint.x + (xD * 2),crystalEntryPoint.y + (yD * 2));
float easingRate = 2;
CCMoveTo *moveTo = [CCMoveTo actionWithDuration:1 position:dest];
CCMoveTo *moveBack = [CCMoveTo actionWithDuration:1 position:crystalEntryPoint];
CCEaseInOut *easeTo = [CCEaseInOut actionWithAction:moveTo rate:easingRate];
CCEaseInOut *easeBack = [CCEaseInOut actionWithAction:moveBack rate:easingRate];
CCCallBlock *zOrderBehind = [CCCallBlock actionWithBlock:^{ [self setZOrder:kManaSpriteBehindCrystalZValue]; }];
CCCallBlock *zOrderInFront = [CCCallBlock actionWithBlock:^{ [self setZOrder:kManaSpriteZValue]; }];
CCSequence *seq = [CCSequence actions:easeTo,zOrderBehind,easeBack,zOrderInFront,nil]; //,zOrderInfront
CCRepeatForever *rep = [CCRepeatForever actionWithAction:seq];
[self runAction:rep];
답변 해 주셔서 감사합니다. 불행히도 귀하의 제안은 동일한 결과를 산출합니다. 액션에서 zOrder를 변경하기 위해 cocos2d 프레임 워크에서 무언가가 깨질 수 있습니다. – Aelin
zOrder를 수동으로 설정해 보셨습니까? 문제가되는 노드의 부모가 다른 경우 zOrder는 형제 노드 (계층 구조의 동일한 수준에있는 노드)의 그리기 순서에만 영향을 미치기 때문에 실제로 부모 노드의 zOrder를 변경해야합니다. – LearnCocos2D
동일한 결과를 수동으로 설정하려고했습니다. 모든 스프라이트는 스프라이트 배치 노드를 부모로 사용하므로 문제의 일부가 될 수 있다고 생각하지만 내부 zorder를 유지한다는 내용을 읽었습니다. 어쩌면 그들은 행동으로 쉽게 변경 될 수 없습니다. Wierd 버그에 대한 설명 : 나는 마나 오브젝트의 인스턴스를 생성 한 다음 크리스탈 오브젝트 (ccsprite의 서브 클래스와 spritebatch에 추가 된)와 함께 collion에 작업을 실행하여 루프에서 액션을 실행합니다. 첫 번째 마나 물체가 생성되면 크리스탈 앞에서 머물러있게됩니다. – Aelin