展会信息港展会大全

3.cocos2dx之Menu,通过menu来实现场景的切换
来源:互联网   发布日期:2015-09-27 15:29:32   浏览:2001次  

导读:1 头文件 TMenu.h #ifndef __TMENU_H__ #define __TMENU_H__ #include cocos2d.h USING_NS_CC; class TMenu :public CCLayer { public: static CCScene * scene(); CREATE_FUNC(TMenu); bool init(); CCMenu * menu; void menuCallback(CCObject * sender);...

1

头文件

TMenu.h

#ifndef

__TMENU_H__

#define

__TMENU_H__

#include

"cocos2d.h"

USING_NS_CC;

class

TMenu :public

CCLayer

{

public:

static

CCScene *

scene();

CREATE_FUNC(TMenu);

bool

init();

CCMenu *

menu;

void

menuCallback(CCObject

* sender);

void

closeCallback(CCObject

* sender);

virtual

bool

ccTouchBegan(CCTouch

*pTouch,

CCEvent *pEvent);

virtual

void

ccTouchMoved(CCTouch

*pTouch,

CCEvent *pEvent);

};

#endif

TMenu.cpp

#include

"TMenu.h"

#include

"AppMacros.h"

#include

"T02LayerSprite.h"

#include

"T03LayerZorder.h"

#include

"T04ColorLayer.h"

#include

"T05Coordinate.h"

#include

"T06BatchNode.h"

#include

"T07Schedule.h"

#include

"T08Touch.h"

#include

"T09Memory.h"

#include

"T10Label.h"

//通过sizeof(menu_array)求出数组占用的总空间大小

//通过sizeof(*menu_array)求出数组中的每个元素的大小

static

char *

menu_array[]

{

"T02LayerSprite.h",

"T03LayerZorder.h",

"T04ColorLayer.h",

"T05Coordinate.h",

"T06BatchNode.h",

"T07Schedule.h",

"T08Touch.h",

"T09Memory.h",

"T10Label.h"

};

CCScene *

TMenu::scene()

{

CCScene *

scene =

CCScene::create();

TMenu *

layer =

TMenu::create();

scene->addChild(layer);

return

scene;

}

bool

TMenu::init()

{

CCLayer::init();

menu =

CCMenu::create();

//通过下面的方式实现将菜单项添加到menu中

for (int

i = 0;

i

{

CCMenuItem *

item =

CCMenuItemFont::create(menu_array[i],

this,

menu_selector(TMenu::menuCallback));

menu->addChild(item);

}

//设置菜单的显示方向为垂直方向

menu->alignItemsVertically();

addChild(menu);

CCArray * array =

menu->getChildren();

CCObject *

obj;

int

i = 0;

CCARRAY_FOREACH(array,

obj)

{

CCMenuItem *

item = (CCMenuItem*)obj;

item->setTag(i

+ 1 + 10000);

i++;

}

CCMenuItem *

closeItem =

CCMenuItemImage::create("CloseNormal.png",

"CloseSelected.png");

closeItem->setTarget(this,

menu_selector(TMenu::closeCallback));

CCMenu *

menu2 =

CCMenu::create(closeItem,

NULL);

menu2->setPosition(CCPointZero);

closeItem->setPosition(ccp(winSize.width

- closeItem->getContentSize().width

/ 2,

winSize.height

- closeItem->getContentSize().height

/ 2));

addChild(menu2);

//设置触摸事件,为可touch

setTouchEnabled(true);

setTouchMode(kCCTouchesOneByOne);

return

true;

}

//当点击到菜单之后跳转到指定的CCScene中去

void

TMenu::menuCallback(CCObject

* sender)

{

CCMenuItem *

item = (CCMenuItem

*)sender;

CCScene *

pScene =

NULL;

switch (item->getTag()

- 10000)

{

case 1:

pScene =

T02LayerSprite::scene();

break;

case 2:

pScene =

T03LayerZorder::scene();

break;

case 3:

pScene =

T04ColorLayer::scene();

break;

case 4:

pScene =

T05Coordinate::scene();

break;

case 5:

pScene =

T06BatchNode::scene();

break;

case 6:

pScene =

T07Schedule::scene();

break;

case 7:

pScene =

T08Touch::scene();

break;

case 8:

pScene =

T09Memory::scene();

break;

case 9:

pScene =

T10Label::scene();

break;

}

if (pScene

!= NULL)

{

//通过CCDirector的sharedDirector来实现场景的切换

CCDirector::sharedDirector()->replaceScene(pScene);

}

}

//当点击关闭的时候游戏退出

void

TMenu::closeCallback(CCObject

* sender)

{

exit(0);

}

bool

TMenu::ccTouchBegan(CCTouch

*pTouch,

CCEvent *pEvent)

{

return

true;

}

void

TMenu::ccTouchMoved(CCTouch

*pTouch,

CCEvent *pEvent){

CCRect

rcWin =

CCRect(0,40,winSize.width,winSize.height

- 80);

CCMenuItem *

firstItem = (CCMenuItem

*)menu->getChildren()->objectAtIndex(0);

CCMenuItem *

lastItem = (CCMenuItem

*)menu->getChildren()->lastObject();

CCPoint

firstInWorld =

menu->convertToWorldSpace(firstItem->getPosition());

CCPoint

lastInWorld =

menu->convertToWorldSpace(lastItem->getPosition());

//其中Delta的坐标表示的是开始坐标的减去最后坐标的差值

if (rcWin.containsPoint(firstInWorld)

&& pTouch->getDelta().y

return;

if (rcWin.containsPoint(lastInWorld)

&& pTouch->getDelta().y>0)

return;

menu->setPositionY(menu->getPositionY()

+ pTouch->getDelta().y);

}

运行结果:

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港