[2048源码分析-1]游戏架构
来源:互联网 发布:foxpro数据库 编辑:程序博客网 时间:2024/05/16 09:54
写在前面:接下来我会逐一介绍一些小游戏的开发,这些小游戏不是我写的,是我找来学习的,都是基于cocos2d-x开发的,有兴趣的朋友可以了解一下.
摘要:这一篇主要讲述2048这款游戏的游戏架构,以及开始场景和结束场景的一些介绍.
2048这款游戏主要包括以下三个Scene:
LoadingScene:加载界面,显示作者等信息的同时异步加载SpriteFrameCache.
GameScene:游戏主场景,该场景只有一个Layer.
GameLayer:网格棋盘,它包含16个Node.
Sprite:一格方块,包含一个背景Sprite和一个Label.
OverScene:游戏结束界面.
首先我们看LoadingScene.h
#ifndef _LoadingScene_H_#define _LoadingScene_H_#include "cocos2d.h"USING_NS_CC;class LoadingScene:public Scene{public:CREATE_FUNC(LoadingScene);virtual bool init();void onEnter() override;void loadComplete(Texture2D *texture);};#endif
这里转一个onEnter()和init()区别的帖子:http://blog.csdn.net/yuyueliuliu/article/details/17122145
看一下LoadingScene.cpp
#include "LoadingScene.h"#include "GameScene.h"bool LoadingScene::init(){if(Scene::init()){return true;}else{return false;}}void LoadingScene::onEnter(){auto size=Director::getInstance()->getVisibleSize();//添加背景auto splash=Sprite::create("splash.png");splash->setPosition(Point(size.width/2,size.height/2));this->addChild(splash);//图片资源的异步加载TextureCache::getInstance()->addImageAsync("sucai.png",CC_CALLBACK_1(LoadingScene::loadComplete,this));}//图片加载完成后的回调函数void LoadingScene::loadComplete(Texture2D *texture){//texture是加载完的图片资源SpriteFrameCache::getInstance()->addSpriteFramesWithFile("sucai.plist", texture);log("load complete");//界面切换auto gameLayer = GameScene::create();Director::getInstance()->replaceScene(TransitionFade::create(3.0f, gameLayer));CCSpriteFrameCache::getInstance()->addSpriteFramesWithFile("sucai.plist", texture);//利用这个SpriteFrameCache来创建所有的精灵auto gameScene = GameScene::create();Director::getInstance()->replaceScene(TransitionFade::create(3.0F, gameScene));}这里涉及到TextureCache和SpriteFrameCache。前面是对图片资源的预加载,加载好后通过回调函数loadingComplete加载SpriteFrameCache.这样以后Sprite的创建都通过SpriteFrameCache来进行。参考:http://www.cocoachina.com/cocos/20140507/8344.html
这里顺便说一下Cocos2d的三个缓存类,参考: http://blog.csdn.net/star530/article/details/23612487
接下来是OverScene.cpp
#include "OverScene.h"#include "GameScene.h"Scene* OverScene::createScene(){auto scene=Scene::create();auto layer=OverScene::create();scene->addChild(layer);return scene;}bool OverScene::init(){if(!Layer::init()){return false;}Size size=Director::getInstance()->getVisibleSize();auto label=Label::create("GAME OVER","Arial",50);label->setPosition(Point(size.width/2,size.height/2));this->addChild(label);auto mLabel=Label::create("Restart","Arial",30);auto uiRestart=MenuItemLabel::create(mLabel,CC_CALLBACK_1(OverScene::restartMenu,this));uiRestart->setAnchorPoint(Point::ZERO);uiRestart->setPosition(Point::ZERO);auto menu=Menu::create(uiRestart,NULL);menu->setAnchorPoint(Point::ZERO);menu->setPosition(Point(10,10));this->addChild(menu);return true;}void OverScene::restartMenu(Ref *pSender){Director::getInstance()->replaceScene(TransitionFade::create(1.0f,GameScene::create()));}
需要学习的是Menu的创建以及回调函数的使用。
0 0
- [2048源码分析-1]游戏架构
- MapReduce源码分析之架构分析1
- 游戏服务器架构分析
- [2048源码分析-2]游戏主场景
- Android 7.0 Camera架构源码分析1
- live555 源码架构分析
- Tomcat源码分析 -- 架构
- coc游戏服务器架构分析
- Poseidon(MyBatis)源码分析(1-整体架构分析)
- Flume架构与源码分析-核心组件分析-1
- Flume架构与源码分析-核心组件分析-1
- wp7游戏 源码加分析
- tomcat架构及源码分析
- OpenNebula架构分析(源码)
- libvirt架构及源码分析
- tomcat源码分析之一《架构》
- Docker源码分析:Docker架构
- libvirt架构及源码分析
- Android向服务器发送请求时的中文乱码问题
- 坦克大战——坦克类
- oracle11g 特性
- 多路视频编解码(零散知识点记录)
- mysql快速入门
- [2048源码分析-1]游戏架构
- ANSI Common Lisp 第六章习题解
- LA 3027
- 蜗牛——矩阵顺时针遍历
- 自定义异常及其处理
- JVM如何操作缓冲区
- Template Method模式和Strategy模式有何异同
- Split()说明
- C++ MFC combo box和list control控件的使用