選択された/選択されていないイベントを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
しかし、デバッガーがメソッドのブレークポイントで停止しないのはなぜですか?
また、質問の2番目の部分はどうですか?具体的な継承者から継承せずに継承者のSelected/Unselected
イベントにカスタム動作を追加できますか(駄洒落で申し訳ありません)、メソッドをオーバーライドできますか?CCMenuItem
CCMenuItem
Selected/Unselected
すなわちCCMenuItemImageWithExtendedSelect
、などでありCCMenuItemLabelWithExtendedSelect
、これらの各クラスはメソッドCCMenuItemToggleWithExtendedSelect
をオーバーライドするだけです( my のように)Selected/Unselected
MenuItemDecorator