1
我想知道如何在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];
非常感謝您的回覆。不幸的是,你的建議產生相同的結果我有一種感覺,在cocos2d框架內可能會有某些東西在改變zOrder的動作。 – Aelin
您是否嘗試過手動設置zOrder?如果有問題的節點具有不同的父節點,則實際上必須更改父節點的zOrder,因爲zOrder僅影響兄弟節點(層次結構中同一級別的節點)的繪製順序。 – LearnCocos2D
我試着用相同的結果手動設置它。所有的精靈都是精靈的批處理節點,所以我認爲這可能是問題的一部分,但我已經讀過他們維護一個內部zorder。也許他們在行動中不能輕易改變。解釋發生的奇怪的錯誤:我創建了一個法術力對象的實例,然後與晶體對象碰撞(ccsprite的兩個子類並添加到spritebatch),它在循環中運行這些動作。當第一個法術物體產生時,它會在水晶前面並留在前面。 – Aelin