2015-03-31 6 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).

Если дети вашего спрайта есть (и акции, и так далее), вам нужно что-то более рекурсивное, как:

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) 
    ) 
) 
); 
Смежные вопросы