一、绝对坐标系和相对坐标系的关系
- CCSprite*
big=CCSprite::create( "big.png"); - big->setAnchorPoint(ccp(0,0));
- big->setPosition(ccp(50,50));//设置在相对父节点的(50,50)位置
- this->addChild(big);//屏幕是父节点
- CCSprite*
little=CCSprite::create("little.png"); - little->setAnchorPoint(ccp(0,0));
- little->setPosition(ccp(50,50)位置
- big->addChild(little);//big是父节点
二、定时器schedule
CCNode内部封装了一个
CCScheduler* m_pScheduler;
1.更新定时器
//开启定时器
this->schduleUpdate();
//update
void HelloWorld::update(float delta)
{
}
2.自定义定时器
//开启定时器,延时2s执行,执行3+1次,执行间隔1s
this->schedule(schedule_selector(HelloWorld::log),1,3,2);
//回调函数
void HelloWorld::log(float dt)
{
}
3.schedule_selector和SEL_SCHEDULE
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
该宏把函数指针转化为SEL_SCHEDULE型指针
typedef void (CCObject::*SEL_SCHEDULE)(float);
是的,还记得一开头说的CCNode内部封装的m_pScheduler吗?
三、CCMenu的布局
1.CCMenu是cocos2d-x的菜单类,它本身不具备菜单具体属性,但是它会作为一个父节点,将具体类型菜单添加进去;使用时,我们先创建子菜单项CCMenuItem,然后加入到CCMenu,最后将CCMenu加入到CCLayer;
如直接将CCMenuItem加入到层,则无法响应回调,
因为CCMenu是继承至CCLayer,也就继承了触摸的相关事件,而CCMenuItem只是从CCNode继承而来,并不响应触摸,因此无法调用回调函数。
2.子菜单项
3.CCMenu的锚点为(0,0),而CCMenuItem的锚点为(0.5,0.5)
CCMenu包含了多个子菜单项,每个子菜单的位置都不一样,如果定义了CCMenu的位置,那它作为父节点会影响到所有的子菜单的位置,因此我们一般把它设置在原点处,然后通过设置子菜单的位置(也就是相对父节点的偏移量)来定位整个菜单。
4.多个子菜单的排列
(1)横向排列,纵向排列,指定间隔
CCMenuItemImage* pCloseItem1 = CCMenuItemImage::create(
“CloseNormal.png”,
“CloseSelected.png”,
this,
menu_selector(HelloWorld::menuCloseCallback));
CCMenuItemImage* pCloseItem2 = CCMenuItemImage::create(
“CloseNormal.png”,
“CloseSelected.png”,
this,
menu_selector(HelloWorld::menuCloseCallback));
CCMenu* pMenu = CCMenu::create(pCloseItem1,pCloseItem2,NULL);
- pMenu->alignItemsHorizontally();//默认间隔是kDefaultPadding=5
- //pMenu->alignItemsHorizontallyWi
thPadding(20);//指定间隔 - //pMenu->alignItemsVertically();//默认间隔也是kDefaultPadding=5
- //pMenu->alignItemsVerticallyWith
Padding(20);//指定间隔
this->addChild(pMenu,1);
(2)按行排列,按列排列
CCMenu* pMenu = CCMenu::create(p1,p2,p3,p4,p5,p6,NULL);
pMenu->alignItemsInRows(3,2,NULL);
this->addChild(pMenu,1);
四、菜单选项卡
使用CCLayerMultiplex来实现;
bool CCManinScene::init()
{
}
void CCMainScene::menuCallback(CCObject* pSender)
{
}