2013-01-20 3 views
1

런타임에 CCSprite 객체에서 이러한 메서드를 호출 할 수 있었으므로 이제 CCSpriteBatchNode에서 일괄 처리하기로 결정했습니다. t은 더 이상 작동하는 것 :Cocos2d : 스프라이트 노드에서 일괄 처리 된 CCSprite에 대한 런타임시 zOrder 설정이 작동하지 않는 것 같습니다.

sprt = [CCSprite spriteWithSpriteFrameName:@"sprt.png"]; 
sprt.anchorPoint = CGPointMake(0.5f, 0.5f); 
sprt.position = CGPointMake(40.0f, 60.0f); 
[batchNode addChild:sprt z:-1]; // It used to work when I was simply "adding as child" the sprt object, I guess now doesn't set the order anymore because somehow the CCSpriteBatch node doesn't allow the re-ordering of child added to it 

CCCallFunc *callback = [CCCallFunc actionWithTarget:self selector:@selector(moveBackwards)]; 
CCCallFunc *callback2 = [CCCallFunc actionWithTarget:self selector:@selector(moveForward)]; 

[sprt runAction: [CCRepeatForever actionWithAction: [CCSequence actions: callback2, callback , nil]]]; 

-(void) moveBackwards 
{ 
    [sprt setZOrder:-1]; 
} 

-(void) moveForward 
{ 
    [sprt setZOrder:1]; 
} 
+0

이 배치 노드의 다른 스프라이트 또는 상대적으로이 배치 노드에없는 객체에 비해 상대적으로 "작동하지 않습니까? – Kreiri

+0

은 동일한 배치 노드에있는 노드에 – mm24

답변

2

당신이 CCSpriteBatchNode이있는 경우, 동일한 계층합니다 (의 SpriteBatch 노드)에있을 모든 CCSprite을 고려해야합니다.

이것은 스프라이트 배치 노드의 스프라이트가 스프라이트 배치 노드의 다른 스프라이트와 비교하여 z 순서를 변경할 수 있지만 z 순서를 변경하여 스프라이트 배치 스프라이트를 다른 스프라이트 뒤에 또는 앞에 표시 할 수 없음을 의미합니다. 노드는 스프라이트의 CCSpriteBatchNode의 하위 노드가 아닙니다.

나는 이것이 당신이 겪은 문제라고 확신합니다. 이 문제를 파악하는 데 어려움이 있다면 CCSpriteBatchNode가 CCLayer와 같은 z 순서와 관련하여 동일한 동작을한다는 것을 고려하십시오 (각각 다른 노드이지만 Devs는 유일한/주요 계층 구성으로 CCLayer에 매달려있는 것처럼 보입니다). 어쩌면 이해하기가 더 쉬울 수도 있습니다. [: 자기 Z : self.parent reorderChild X] 다른 사람이이 문제를 가로 지르는 그냥 경우

+0

감사합니다. Steffen에게 감사드립니다. 나는 대답을 이해합니다. CCSpriteBatchNode는 레이어로 간주되며 배치 노드의 하위 노드는 해당 레이어와 관련하여 만 변경할 수 있습니다 (몇 달 전에 이미이 답변을 제공 했음). 불행히도, 내가 이해하는 한, 그것은 내가 직면하고있는 문제가 아닙니다. 내 문제는 RUN TIME에 주문을 변경하는 것이고 작동하지 않는 것 같습니다. 나는 전후방으로 역동적으로 움직이는 객체를 가지고 있으며 CCSpriteBatchNodes를 사용하여 준 첫 번째 z-Order 만 기억할 것입니다. – mm24

2

, 다음은 ... 스프라이트 순서를

작동합니다;

관련 문제