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 в качестве дочернего элемента другого элемента меню, и оба правильно реагируют на прикосновения.