MenuItemMenu所须的子儿子类型。MenuItem旗下子类:

  • MenuItemLabel
  • MenuItemAtlasFont
  • MenuItemFont
  • MenuItemSprite
  • MenuItemImage
  • MenuItemToggle

路径

1
2
2d/menu-nodes/CCMenuItem.h
2d/menu-nodes/CCMenuItem.cpp

源码分析

先看看下面这段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void MenuItem::selected()
{
_selected = true;
}

void MenuItem::unselected()
{
_selected = false;
}

void MenuItem::activate()
{
if (_enabled)
{
if( _callback )
{
_callback(this);
}
/* 此处略去,脚本处理相关 */
}
}

结合之前Menu分析的代码,可以得知。

  • onTouchBegan时,是调用了selected
  • onTouchMoved时,是调用了selected
  • onTouchEnded时,是调用了unselectedactivate

onTouchEnded时,即松开按钮的时候才去触发MenuItem设置的回调函数ccMenuCallback,实际就是std::function<void(Ref*)>

值得注意的是,在onTouchMoved中存在onTouchBegan按钮A,然后onTouchMoved到另一个按钮B去了,在这种情况下会先调用按钮Aunselected,然后在调用按钮Bselected

PS: 什么时候得开篇来记录下cocos2dx里面的宏


待续