我正在实现一个装饰器模式,用于将选定/未选定的事件添加到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
ie CCMenuItemImageWithExtendedSelect
,等CCMenuItemLabelWithExtendedSelect
,CCMenuItemToggleWithExtendedSelect
并且这些类中的每一个都只是覆盖Selected/Unselected
方法(如在 my 中MenuItemDecorator
)