2015-03-31 41 views
1

我創建了一個精靈菜單,併爲每個精靈添加一個標籤。runAction函數將縮放精靈的子節點,但不會淡化它們

var items = [], 
for(var i=0 ; i<players.length ; i++) { 

    var frame = cc.spriteFrameCache.getSpriteFrame("listviewitem"), 
    spritesNormal = cc.Sprite.create(frame,cc.rect(0,0,380,100)), 
    spritesSelected =cc.Sprite.create(frame,cc.rect(0,0,380,100)), 
    spritesDisabled =cc.Sprite.create(frame,cc.rect(0,0,380,100)); 

    var label = cc.LabelBMFont.create(players[i].name , "res/fonts/bees50.fnt" , cc.LabelAutomaticWidth, cc.TEXT_ALIGNMENT_CENTER, cc.p(0, 0));    
    spritesNormal.addChild(label, 5); 

    var listviewSprite = new cc.MenuItemSprite(spritesNormal, spritesSelected, spritesDisabled, this.onListviewTap, { self: this, player: players[i] });  
    items.push(listviewSprite); 
} 

this._listview = new cc.Menu(items);  
this.addChild(this._listview,1); 

後來我嘗試通過動畫菜單列表中的一個精靈:

var sprite = this._listview.children[i], 

sprite.runAction(
    cc.EaseSineIn.create(
     cc.spawn(
      cc.scaleTo(1,3,3), 
      cc.fadeOut(1) 
     ) 
    ) 
); 

但這淡出只精靈,但不是標籤。縮放動畫也是爲標籤完成的,只是淡化不了。問題是什麼?錯誤?

回答

1

您需要手動設置setCascadeOpacityEnabled(true);對所有您希望受到遞歸影響的孩子(answer got from the forums)。

如果你的精靈的孩子有chidlren(等等),你需要更多的東西遞歸,如:

var setCascadeOpacityEnabledRecursively= function(node, state){ 
    node.children.forEach(function(child){ 
    setCascadeOpacityEnabledRecursively(child, state); 
    }); 

    node.setCascadeOpacityEnabled(state); 
}; 

然後調用它:

var sprite = this._listview.children[i]; 

setCascadeOpacityEnabledRecursively(sprite , true); 

sprite.runAction(
    cc.easeSineIn(
    cc.spawn(
     cc.scaleTo(1,3,3), 
     cc.fadeOut(1) 
    ) 
) 
);