CCMenuItem, добавленный в качестве дочернего элемента к другому CCMenuItem, не реагирует на прикосновения

Я реализую шаблон декоратора для добавления выбранных / невыбранных событий в CCMenuItem наследники:

  public class MenuItemDecorator : CCMenuItem
  {
    public event EventHandler OnSelected;
    public event EventHandler OnUnselected;
    private readonly CCMenuItem _menuItem;

    public MenuItemDecorator(CCMenuItem menuItem) //set a decorated item
    {
      menuItem.ThrowIfNull("menuItem");

      _menuItem = menuItem;
      AddChild(_menuItem);
    }

    public override void Selected()
    {
      base.Selected();
      _menuItem.Selected();

      if(OnSelected != null)
        OnSelected(this, null);
    }

    public override void Unselected()
    {
      base.Unselected();
      _menuItem.Unselected();

      if(OnUnselected != null)
        OnUnselected(this, null);
    }
  }

Затем я "украшаю" свои вещи:

...
var soundToggle = MenuItemToggleBuilder.New(soundOffBtn, soundOnBtn)
                                       .SetPosition(positionX, positionY)
                                       .SetTarget(ToggleSelector)
                                       .Build();

var decorToggle = new MenuItemDecorator(soundToggle);
decorToggle.SetTarget(Selector); // for debugging
decorToggle.OnSelected += (s, e) => toggleWafer.Scale = 0.95f;
decorToggle.OnUnselected += (s, e) => toggleWafer.Scale = 1f;

LayerMenu.AddChild(soundToggle, int.MaxValue); //LayerMenu is CCMenu
...

private void Selector(object o)
{//breakpoint is here
}
...

Но когда я запускаю приложение и нажимаю на мой decorToggle это не отвечает. Более того, это не входит в мой Selector метод (где я установил точку останова).

Так что я делаю не так? Можно ли сделать это проще? заранее спасибо


Спасибо, @LearnCocos2D. Но почему отладчик не останавливается на точке останова в Selector метод?

И что со второй частью вопроса? Могу ли я добавить пользовательское поведение Selected/Unselected события на CCMenuItem наследники без наследования от бетона CCMenuItem наследник (извините за каламбур) и переопределение Selected/Unselected методы?

т.е. CCMenuItemImageWithExtendedSelect, CCMenuItemLabelWithExtendedSelect, CCMenuItemToggleWithExtendedSelect и т.д., и каждый из этих классов просто переопределяет Selected/Unselected методы (как в моем MenuItemDecorator)

1 ответ

Решение

Если CCMenu ведет себя так же, как и в cocos2d-iphone, что можно с уверенностью предположить, то CCMenuItem не может быть наращиваемым. Вы не можете иметь CCMenuItem в качестве дочернего элемента другого элемента меню, и оба правильно реагируют на прикосновения.

Другие вопросы по тегам