Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)
这里是 Evankaka 的博客,欢迎大家前来讨论与交流~~~~~~
转载请注明出处http://blog.csdn.net/evankaka/article/details/42936117
本文要实现游戏中的暂停、重新开始。将当前界面截图,然后用这张图去构造一个层(以这张图为背景),然后加个按钮,主界面点暂停时,pushScene(),然后转到游戏暂停界面,当在游戏暂停界面点继续游戏popScne()。在cocos2dx中推进(pushScene())暂停场景,之前运行的场景将会自动暂停,然后我们可以在暂停场景中操作,当我们不再需要暂停场景时,可以popScene()将暂停场景弹出。重新开始游戏直接replaceScene().
cocos2d-x版本:2.2.5
工程环境:windows7+VS2010
打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开
(源码免费下载)
本文效果:
一、游戏暂停界面初步实现
思路:将当前界面截图,然后用这张图去构造一个层(以这张图为背景),然后加个按钮,主界面点暂停时,pushScene(),然后转到游戏暂停界面,当在游戏暂停界面点继续游戏时popScne(),
首先看看自定义的游戏暂停的层
头文件 Gamepause.h
#ifndef __Gamepause__H__
#define __Gamepause__H__
#include "cocos2d.h"
USING_NS_CC;
class Gamepause : public cocos2d::CCLayer
{
public:virtual bool init(); static cocos2d::CCScene* scene(CCRenderTexture* sqr);CREATE_FUNC(Gamepause);//继续游戏void menuContinueCallback(CCObject* pSender);private:};#endif // __Gamepause_H__
然后是实现文件
#include "Gamepause.h"
//传入一个CCrenderTexture
//相当于一个正在运行的游戏的截图作为这个暂停对话框的背景
//这样就看起来像是对话框在游戏界面之上,一般游戏当中都是这样子写的。
CCScene* Gamepause::scene(CCRenderTexture* sqr)
{CCScene *scene = CCScene::create();Gamepause *layer = Gamepause::create();scene->addChild(layer,1);//增加部分:使用Game界面中截图的sqr纹理图片创建Sprite//并将Sprite添加到GamePause场景层中//得到窗口的大小CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCSprite *back_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture()); back_spr->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); //放置位置,这个相对于中心位置。back_spr->setFlipY(true); //翻转,因为UI坐标和OpenGL坐标不同back_spr->setColor(cocos2d::ccGRAY); //图片颜色变灰色scene->addChild(back_spr);return scene;
}bool Gamepause::init()
{if ( !CCLayer::init() ){return false;}//得到窗口的大小CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();//原点坐标CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();//继续游戏按钮CCMenuItemImage *pContinueItem = CCMenuItemImage::create("pause_continue.png","pause_continue.png",this,menu_selector(Gamepause::menuContinueCallback));pContinueItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2+30));CCMenu* pMenu = CCMenu::create(pContinueItem,NULL);pMenu->setPosition(CCPointZero);this->addChild(pMenu, 2);return true;
}
void Gamepause::menuContinueCallback(CCObject* pSender)
{CCDirector::sharedDirector()->popScene();}
使用方法
在游戏主界面init函数加个:
CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuPauseCallback));pCloseItem->setPosition(ccp(visibleSize.width - pCloseItem->getContentSize().width/2 ,visibleSize.height - pCloseItem->getContentSize().height/2));// create menu, it's an autorelease objectCCMenu* pMenu = CCMenu::create(pCloseItem, NULL);pMenu->setPosition(CCPointZero);this->addChild(pMenu, 1);
然后是回调用的函数 暂停界面((记得加上面的头文件就是了))
void HelloWorld::menuPauseCallback(CCObject* pSender)
{//得到窗口的大小CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCRenderTexture *renderTexture = CCRenderTexture::create(visibleSize.width,visibleSize.height);//遍历当前类的所有子节点信息,画入renderTexture中。//这里类似截图。renderTexture->begin(); this->getParent()->visit();renderTexture->end();//将游戏界面暂停,压入场景堆栈。并切换到GamePause界面CCDirector::sharedDirector()->pushScene(Gamepause::scene(renderTexture));
}
这里来看看效果:
效果就是这样了,基本实现了游戏暂停的功能了。上面的代码可以直接拿去用,自己把图片改改就行了
二、游戏暂停界面美化实现
单单只有上面的肯定是不行的,太难看了,所以给图片的按钮加个背景图片,然后再加三个按钮,
这是按钮背景图片
这是三个按钮的图片
要用的直接拿去用,全是我原创的
直接看下代码,就是在上面的基础上来增加函数的
Gamepause.h
#ifndef __Gamepause__H__
#define __Gamepause__H__
#include "cocos2d.h"
USING_NS_CC;
class Gamepause : public cocos2d::CCLayer
{
public:virtual bool init(); static cocos2d::CCScene* scene(CCRenderTexture* sqr);CREATE_FUNC(Gamepause);//继续游戏void menuContinueCallback(CCObject* pSender);//重新开始游戏void menuRestart(CCObject* pSender);//回主界面void menuLogin(CCObject* pSender);
private:};#endif // __Gamepause_H__
Gamepause.cpp
#include "Gamepause.h"
#include "HelloWorldScene.h"//重新开始游戏的头文件
//传入一个CCrenderTexture
//相当于一个正在运行的游戏的截图作为这个暂停对话框的背景
//这样就看起来像是对话框在游戏界面之上,一般游戏当中都是这样子写的。
CCScene* Gamepause::scene(CCRenderTexture* sqr)
{CCScene *scene = CCScene::create();Gamepause *layer = Gamepause::create();scene->addChild(layer,1);//把游戏层放上面,我们还要在这上面放按钮//增加部分:使用Game界面中截图的sqr纹理图片创建Sprite//并将Sprite添加到GamePause场景层中//得到窗口的大小CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCSprite *back_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture()); back_spr->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); //放置位置,这个相对于中心位置。back_spr->setFlipY(true); //翻转,因为UI坐标和OpenGL坐标不同back_spr->setColor(cocos2d::ccGRAY); //图片颜色变灰色scene->addChild(back_spr);//添加游戏暂停背景小图,用来放按钮CCSprite *back_small_spr = CCSprite::create("back_pause.png");back_small_spr->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); //放置位置,这个相对于中心位置。scene->addChild(back_small_spr);return scene;
}bool Gamepause::init()
{if ( !CCLayer::init() ){return false;}//得到窗口的大小CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();//原点坐标CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();//继续游戏按钮CCMenuItemImage *pContinueItem = CCMenuItemImage::create("pause_continue.png","pause_continue.png",this,menu_selector(Gamepause::menuContinueCallback));pContinueItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2+30));//重新开始游戏按钮CCMenuItemImage *pRestartItem = CCMenuItemImage::create("pause_restart.png","pause_restart.png",this,menu_selector(Gamepause::menuRestart));pRestartItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2-20));//回主界面CCMenuItemImage *pLoginItem = CCMenuItemImage::create("pause_login.png","pause_login.png",this,menu_selector(Gamepause::menuLogin));pLoginItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2-70));// create menu, it's an autorelease objectCCMenu* pMenu = CCMenu::create(pContinueItem,pRestartItem,pLoginItem,NULL);pMenu->setPosition(CCPointZero);this->addChild(pMenu, 2);return true;
}
void Gamepause::menuContinueCallback(CCObject* pSender)
{CCDirector::sharedDirector()->popScene();}
//重新开始游戏
void Gamepause::menuRestart(CCObject* pSender)
{CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());
}
//回主界面
void Gamepause::menuLogin(CCObject* pSender)
{}
最后再来看看效果:
三、思路总结
游戏暂停将当前界面截图,然后这个张图去创建一个层,然后就是push场景和pop场景了。
Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)相关推荐
- java游戏暂停_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一次写java的小游戏 想实现点击右下角的暂停 实现游戏的暂停和继续 不知道该怎么加,自己找了线程的内容但试了还是成功不了,求大佬们帮一下小白.代码有点 ...
- 十二 手游开发神器 cocos2d-x editor 之游戏暂停悬浮层
进入游戏主场景,游戏需要临时暂停.重新选关.重新玩等等,所以玩家点击暂停按钮,弹出一个选择悬浮层,这一节我们来实现: 效果如下: 点击右上角游戏暂停: 返回回到开始界面: 代码下载:http://ww ...
- Unity关于Time.timeScale游戏暂停
游戏暂停一般我会使用Time.timeScale = 0,我把游戏暂停理解为和切后台操作是一个意思,都应该停止当前游戏行为.但是这并不表明update和fixUpdate就不运行了. Time.tim ...
- Time之游戏暂停功能
Time.timeScale还会影响Time.time的时间,比如Time.timeScale = 2的话,那么Time.time的增长速度也会变成2倍速度.如果你想取到游戏的实际时间,那么使用Tim ...
- unity3d游戏暂停
timeScale不会影响Update和LateUpdate的执行速度. timeScale只会影响FixedUpdate的速度,因为FixedUpdate是根据时间来的 无论Time.timeSca ...
- 【cocos2d-x入门实战】微信飞机大战之十一:游戏暂停和触摸屏蔽
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/11999229 一个游戏打到一半尿点咋整?难道要憋着...这不科学啊! 好吧, ...
- Unity游戏暂停之Update与FixedUpdate区别
游戏暂停 示例程序 下面这段代码演示游戏暂停 using UnityEngine; using System.Collections;public class GamePauseTest : Mono ...
- python暂停和恢复游戏_pygame游戏之旅 添加游戏暂停功能
pygame游戏之旅 添加游戏暂停功能 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: pygame游戏之旅 添加游戏暂停功能.txt ] (友情提示:右键点上行 ...
- Unity实现按Esc键控制面板出现消失,同时游戏暂停
需要在项目中创建面板对象,具体脚本的实现过程如下 using System.Collections; using System.Collections.Generic; using UnityEngi ...
最新文章
- python上下文管理器with
- C语言树形打印二叉树
- Cocos2d中使用颜色混合:加算,减算
- java实现支付宝支付完整过程(沙箱测试环境,下篇整合ssm)
- 如何看待papi酱的个人平台papitube?
- 通信 / HTTP Host 请求头的作用
- Git、TortoiseGit、GitHub、Gitee、GitLab 安装与入门使用
- Passwordless SSH Login
- 在企业中使用的Silverlight:RAD数据通信用户友好的数据库访问
- C++学习之路 | PTA乙级—— 1045 快速排序 (25 分)(精简)
- Babylon-AST初探-代码更新删除(Update Remove)
- 346个基因组可视化工具一网打进!
- 汇编学习的安装DOSBOX及debug.exe教程
- 计算机视觉算法岗面经,2019秋招资料
- Bailian2855 计算概论(刘志敏老师班)ACM测试题1【椭圆】
- js高级学习笔记(b站尚硅谷)-13-作用域链
- 【VMware vSAN 7.0】5.4.2 创建 vSAN 集群—我们有软硬件解决方案
- 【机器学习】机器学习数据集大全
- 全球一月内两次遭到病毒暴击 2017网络安全生态峰会或有解药
- Linux查看设备端口号