0

選択された/選択されていないイベントを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イベントにカスタム動作を追加できますか(駄洒落で申し訳ありません)、メソッドをオーバーライドできますか?CCMenuItemCCMenuItemSelected/Unselected

すなわちCCMenuItemImageWithExtendedSelect、などでありCCMenuItemLabelWithExtendedSelect、これらの各クラスはメソッドCCMenuItemToggleWithExtendedSelectをオーバーライドするだけです( my のように)Selected/UnselectedMenuItemDecorator

4

1 に答える 1

0

CCMenu が cocos2d-iphone と同じ動作をする場合 (想定しても問題ありません)、CCMenuItem はスタック可能ではありません。CCMenuItem を別のメニュー項目の子として持つことはできず、両方ともタッチに適切に反応します。

于 2013-09-21T19:26:44.953 に答える