cocos2dx小知识——暂停界面的实现

游戏需要暂停时,一般都是将游戏界面变灰,暂停所有动作,然后弹出一堆的按钮。

这该如何实现暂停界面呢?

1、定义

我定义了两个类:Game游戏类、GamePause暂停类。

Game类中调用doPause()函数进行游戏暂停,却换到GamePause暂停画面。

2、doPause()

这里需要用到CCRenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片。

在doPause类中使用该类,将游戏界面截个图

//
	//创建CCRenderTexture,纹理画布大小为窗口大小(480,320)
	CCRenderTexture *renderTexture = CCRenderTexture::create(480,320);

	//遍历Game类的所有子节点信息,画入renderTexture中。
	//这里类似截图。
	renderTexture->begin(); 
	this->getParent()->visit();
	renderTexture->end();

	//将游戏界面暂停,压入场景堆栈。并切换到GamePause界面
	CCDirector::sharedDirector()->pushScene(GamePause::scene(renderTexture));
//

3、GamePause

(1)在类中添加一个用于创建GamePause场景的静态函数,且传入参数为在doPause()函数中截图的动态纹理图片renderTexture。

//
	static cocos2d::CCScene* scene(CCRenderTexture* sqr);
//

(2)实现创建GamePause场景的静态函数。

//
	CCScene* GamePause::scene(CCRenderTexture* sqr) {

		CCScene *myscene = CCScene::create();  
		GamePause* mylayer = GamePause::create();
		myscene->addChild(mylayer);

		//增加部分:使用Game界面中截图的sqr纹理图片创建Sprite
		//并将Sprite添加到GamePause场景层中
		CCSprite *_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture());  
		_spr->setPosition(ccp(240,135)); //窗口大小(480,320),这个相对于中心位置。
		_spr->setFlipY(true);            //翻转,因为UI坐标和OpenGL坐标不同
		_spr->setColor(cocos2d::ccGRAY); //图片颜色变灰色
		myscene->addChild(_spr);

		return myscene;  
	}
//

4、继续游戏

若要继续游戏,由于Game界面是push到场景堆栈中的。所以只要popScene,即可还原到游戏界面,即可继续游戏。

//
	CCDirector::sharedDirector()->popScene();
//
时间: 2024-12-14 11:05:14

cocos2dx小知识——暂停界面的实现的相关文章

cocos2dx小知识——Android虚拟机调试问题

1.提出问题 遇到过这样的一个问题:我将cocos2dx程序移植到Android项目中去后,想通过Android虚拟机来进行调,但是运行虚拟机后,出现如下错误: Unfortunately, MyTest has stopped. 这是因为:cocos2dx需要OpenGL进行渲染,而Android虚拟机没有这个东西,所以需要启用硬件的渲染器进行渲染,即GPU. 在老版本的Android SDK中,使用AVD创建虚拟机,是有勾选"Use Host GPU"这个选项的. 也就是使用主机的

cocos2dx小知识——两个头文件相互包含问题

[问题] Game.h包含了Ship.h,并且Ship.h也包含了Game.h. 然后在Game.h中声明了一个成员变量为Ship类:Ship* ship; 会出现找不到Ship类的错误. [解决] 在Game.h头文件中对Ship类进行声明即可:class Ship; [扩展] 如果在Game.cpp和Ship.cpp中相互包含Game.h与Ship.h. 是不会有影响的.

cocos2dx小知识——schedule/update不起作用

在开发的过程中,我自己写了一个英雄类Hero,继承自节点类CCNode.可是在构造函数中开启更新函数schedule/update不起作用了. 后来百度了一番,解决了. 主要原因:更新函数的触发事件需要通过父类进行初始化. 解决方法:调用父类的onEnter()函数. 我这里的父类为CCNode,所以只要在构造函数Hero()中最开始的部分加上如下代码即可. // Hero::Hero() { //初始化父类onEnter CCNode::onEnter(); //相关代码... //开启更新

cocos2dx小知识——虚拟摇杆

[唠叨] 如果手机设备没有手柄.键盘的话,就只能靠触摸屏幕来操作游戏了. 虚拟摇杆的作用就是在游戏中创建几个按键来模拟手柄,通过触控来实现上下左右的移动,以及攻击.跳跃.发大招等操作. 如下所示,有一个移动的虚拟摇杆,以及一个A键. 已有开源的SneakyInput虚拟摇杆,开源地址:https://github.com/Ntran013/SneakyInput 而这里博主则是将开源的SneakyInput进一步的修改,方便博主自身的使用. [demo下载] http://down.51cto.

cocos2dx小知识——更换精灵图片

更换精灵CCSprite的图片有两种方式. 1.直接通过图片更换 使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片. // CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("bg2.png"); bg->setTexture(texture); // 2.通过缓存帧替换 使用setDisplayFrame(CCSpriteFrame*)函数,利用

cocos2d-x 3.0 Loading界面实现

这个世界每一天都在验证我们的渺小,但我们却在努力创造,不断的在这生活的画卷中留下自己的脚印,也许等到我们老去的那一天,老得不能动只能靠回忆的那一天,你躺在轮椅上,不断的回忆过去,相思的痛苦忘不了,相恋的甜蜜浮现在心头,嘴角不觉一笑,年少时的疯狂,热情,理想和抱负,都随着岁月的流去而化作人生的财富,或多或少,犹如那夕阳西下的余辉,在慢慢消失着不见.. (不文艺你会死?) 好吧,最近天天在忙着写游戏,天天写,而且效率还不高,光这两天想着怎么优化和控制敌人出现的逻辑和地图数据的存储,就前前后后墨迹了俩

Cocos2dx 小技巧(十三)聊聊坐标系

一好友考上了空姐,她说:以后基本上不会回来了,等下次见面时请叫我白富美!虽然有点羡慕,但我依旧不甘示弱回复:下次见面时请叫我高富帅!未来,谁说得准呢? ------------------有段时间没用到onTouchBegan,近来写代码时发现对convertToGL(),getLocation()这些接口都有点陌生了,所以趁这次机会就写个总结到博客里,下次忘了就来博客里看看,当笔记用咯. 首先脑补下基础知识吧:1.OpenGL坐标系:该坐标系原点在屏幕左下角,x轴向右,y轴向上.这也就是coc

ios开发小知识2

http://blog.sina.com.cn/s/blog_66450b500102vadq.html http://www.cnblogs.com/lovesmile/archive/2012/06/27/2565569.html ios开发小知识2(转自cc) 退回输入键盘  - (BOOL)textFieldShouldReturn:(id)textField{    [textField resignFirstResponder];} CGRectCGRect frame = CGRe

iOS 小知识-tips

--->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 NSKeyedArchiver [UIScreen mainScreen] [UIDevice currentDevice] [UIFont familyNames] [UIApplication sharedApplication] [NSUserDefaults standardUserDefaults