3.cocos2dx它Menu,由menu为了实现场景切换



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 <
sizeof(menu_array)
/ sizeof(*menu_array);
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<0)

return;

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

return;

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

}


执行结果:

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-09-30 10:20:57

3.cocos2dx它Menu,由menu为了实现场景切换的相关文章

cocos2dx基础篇(26)——场景切换CCTransitionScene

[唠叨] 游戏中两个场景的切换时经常要被用到的,cocos2dx引擎为我们提供了许多场景切换的动画,我感觉有些和PPT的切换很类似,所以感觉很熟悉.如:淡入淡出.翻页.跳入跳出等等. 本节要讲的场景切换方式十分丰富,不过内容比较简单,很容易掌握. [致谢] http://gl.paea.cn/contents/d4d676f371519df4.html [场景管理] 在讲场景切换CCTransitionScene之前,先来复习一下场景CCScene的管理. 游戏运行的过程中,每次只能运行一个场景

Android -- Options Menu,Context Menu,Popup Menu

Options Menu                                                                           创建选项菜单的步骤: 1.覆盖Activity 的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用 2.调用Menu 的add( )方法添加菜单项(MenuItem),同时可以调用MenuItem 的setIcon( )方法来为菜单项设置图标 3.当菜单项(MenuItem)被选择时,

cocos2dx 3.1从零学习(二)——菜单、场景切换、场景传值

回顾一下上一篇的内容,我们已经学会了创建一个新的场景scene,添加sprite和label到层中,掌握了定时事件schedule.我们可以顺利的写出打飞机的主场景框架. 上一篇的内容我练习了七个新场景,每一个场景都展示不同的东西,像背景定时切换.各种字体的随机颜色和位置等.每次要切换一个场景都要修改AppDelegate中的调用代码,非常的不方便查看,这一篇我们写场景的切换.每当我们创建一个新的场景的时候只要添加对应按钮到主界面,点击即可以切换过去查看对应的效果.这个有点类似官方提供的cppt

Cocos2d-x场景切换相关函数介绍

场景切换是通过导演类Director实现的,其中的相关函数如下: runWithScene(Scene* scene).该函数可以运行场景.只能在启动第一个场景时候调用该函数.如果已经有一个场景运行情况下则不能调用该函数. replaceScene(Scene* scene).切换到下一个场景.用一个新的场景替换当前场景,当前场景被终端释放. pushScene(Scene* scene).切换到下一个场景.将当前场景挂起放入到场景堆栈中,然后再切换到下一个场景中. void popScene(

cocos2d-x 场景切换

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************* 今天终于把界面交上去了,~~o(>_<)o ~~,花费了好多时间... 做个  场景切换  来庆祝一下. PS:欢迎大家一起讨论呀~,共同加油! ********************************* 本文三部分: 1.前言 2.菜单按钮执行场景切换

8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画

 1 添加场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadialCW CCTransitionProgressHorizontal CCTransitionProgressVertical CCTransitionProgressInOut CCTransitionProgressOutIn CCTransitionCrossFade CCTransitionF

8 cocos2dx加入场景切换效果,控制场景切换彻底完毕之后再运行动画

 1 加入场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadialCW CCTransitionProgressHorizontal CCTransitionProgressVertical CCTransitionProgressInOut CCTransitionProgressOutIn CCTransitionCrossFade CCTransitionF

cocos2dx 场景切换

版本是 cocos2dx 3.3 场景切换的时刻是:(代码有删减) void Director::drawScene() { // calculate "global" dt calculateDeltaTime(); if (_nextScene) { setNextScene(); } } 每一帧都会检查,看是不是有 _nextScene, 也就是 是不是需要进行场景切换了. 一般场景切换的过程: 当添加一个场景时,正在运行的场景会调用 _runningScene->onEx

Cocos2d-X研究之3.0 场景切换特效汇总

Cocos2d-X研究之3.0 场景切换特效汇总 2014-08-05      0个评论    来源:游戏编程    收藏    我要投稿 cocos2d-x 3.0中场景切换特效比较多,而且游戏开发中也经常需要用到这些特效,来使场景切换时不至于那么干巴,遂这里汇总一下,开发中使用. 场景切换用到导演类Directory,大多数用的都是替换场景,当然也可以用出栈进栈的方式来进行场景的替换,这里以replaceScene来举例.3.0事件分发机制—触摸事件监听不明白的可以看下. 场景切换特效的应

Cocos2dx 学习笔记整理----场景切换

据说Cocos2dx场景切换的方法有32种:cocos2dx 常见的32种切换场景的动画 无需一一求证,只需要知道切换场景需要怎么做就行了. 作为导演CCDirector,切换场景的事情当然归它管了. 切换场景的接口如下: ? 1 CCDirector::sharedDirector()->replaceScene(cocos2d:CCScene * pScene); 所以,我们只要把需要切换的场景实例传进去就可以了. ? 1 2 CCScene * pScene = GameMain::sce