Функция 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); на всех детей, которых вы хотите, рекурсивно затронуты ( ответ получен с форумов).

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

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)
    )
  )
);
Другие вопросы по тегам