日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

3.cocos2dx之Menu,通过menu来实现场景的切换

發(fā)布時(shí)間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.cocos2dx之Menu,通过menu来实现场景的切换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


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)求出數(shù)組占用的總空間大小

//通過sizeof(*menu_array)求出數(shù)組中的每個(gè)元素的大小

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();

??? //通過下面的方式實(shí)現(xiàn)將菜單項(xiàng)添加到menu

??? for (int i = 0; i < sizeof(menu_array) / sizeof(*menu_array); i++)

??? {

??????? CCMenuItem * item = CCMenuItemFont::create(menu_array[i],

??????????? this,

??????????? menu_selector(TMenu::menuCallback));

??????? menu->addChild(item);

??? }

??? //設(shè)置菜單的顯示方向?yàn)榇怪狈较?/span>

??? 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);

?

??? //設(shè)置觸摸事件,為可touch

??? setTouchEnabled(true);

??? setTouchMode(kCCTouchesOneByOne);

?

??? return true;

}

?

//當(dāng)點(diǎn)擊到菜單之后跳轉(zhuǎn)到指定的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)

??? {

??????? //通過CCDirectorsharedDirector來實(shí)現(xiàn)場(chǎng)景的切換

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

??? }

}

?

//當(dāng)點(diǎn)擊關(guān)閉的時(shí)候游戲退出

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的坐標(biāo)表示的是開始坐標(biāo)的減去最后坐標(biāo)的差值

??? if (rcWin.containsPoint(firstInWorld) && pTouch->getDelta().y<0)

??????? return;

??? if (rcWin.containsPoint(lastInWorld) && pTouch->getDelta().y>0)

??????? return;

??? menu->setPositionY(menu->getPositionY() + pTouch->getDelta().y);

}

運(yùn)行結(jié)果:

?

總結(jié)

以上是生活随笔為你收集整理的3.cocos2dx之Menu,通过menu来实现场景的切换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。