你是否以前为cocos方便高速开发而兴奋,你是否以前为各种工具的便利开发而感动,但如今的你是否为每次创建一个新的项目都是HelloWorldScene而苦恼?

好吧,事实上我也感觉到了,每次创建一个项目都是那个模板,太麻烦了,由于基本HelloWorldScene不删也是放在那不用的,而且还是要自己创建一些新的scene新的layer,所以,索性一点,今天我们就直接来改动这个模板,这样以后创建项目就方便了。事实上也不是有益要改动的,近期在尝试些新的东西,所以常常性的创建一个新项目,但每次刚開始改动的内容都是一样的,浪费时间和精力。好了,话不多说,開始我们的行动!

首先分析一下一个游戏的基本模块,假设要做一个游戏,或者简单一点的一个demo,我们基本会有这些场景或者层,

開始场景

游戏场景

SplashLayer或者说是刚进入游戏的logo画面

游戏结束层,计算分数,展示几个星级这些

除此之外,再来一个游戏管理的单例类,主要游戏中一些像广告啊,支付啊等等什么的全局一个就ok。

有了这些类的需求,咱们開始码一下代码了,这里我用的是3.0的版本号,2.x做法差点儿相同,打开引擎包的更文件夹,进入templates文件夹,cpp-template-default这个里面就是cpp项目的模板了,进来打开一看,

各个平台的解决方式都在这里了,咱们打开win32下的,可是一打开就会出错的,

由于缺少这些库,如今的版本号创建项目的时候都是会复制引擎库的,不再依赖原来的目录结构,所以你能够带着你的全然项目放到不论什么地方都能够,所以咱们还得加入一下这些库,找到曾经用3.0创建的项目,在里面有个cocos2d的目录,然后里面包含了这些

把它粘贴过来,再打开我们的模板项目就能够了,接下来就能够创建必要的类而且写代码了。

这是我建的几个类,

简单说明一下,Layers目录里存放各种层和场景,Sprites里面放创建的精灵,仅仅是如今里面没有,BaseLayer创建的原因是由于每次创建的层里都会用到获取屏幕的大小,所以我又封了一次,代码例如以下,

#pragma once
#include "cocos2d.h" USING_NS_CC; class BaseLayer : public Layer
{
public:
BaseLayer();
~BaseLayer();
CREATE_FUNC(BaseLayer);
virtual bool init() override; protected:
Size size; };
#include "BaseLayer.h"

BaseLayer::BaseLayer()
{
} BaseLayer::~BaseLayer()
{
} bool BaseLayer::init()
{
if (!Layer::init())
return false; size = Director::getInstance()->getWinSize(); return true;
}

这样在创建的其它layer就继承BaseLayer就ok,举个GameScene的代码,

#pragma once
#include "cocos2d.h"
#include "Layers\BaseLayer.h" USING_NS_CC; class GameScene : public BaseLayer
{
public:
GameScene();
~GameScene();
CREATE_FUNC(GameScene);
virtual bool init() override;
static Scene* createScene();
};

#include "GameScene.h"
#include "StartScene.h"
#include "GameManager.h"
#include "GameoverLayer.h" GameScene::GameScene()
{
} GameScene::~GameScene()
{
} Scene* GameScene::createScene()
{
auto scene = Scene::create();
auto layer = GameScene::create();
scene->addChild(layer); return scene;
} bool GameScene::init()
{
if (!BaseLayer::init())
return false; return true;
}

一定要在init方法里运行一次BaseLayer的init方法,不然等于没有获取getWinSize方法。

接着改改AppDelegate这个cpp,默认创建的窗体大小是960*640的,有点大,没有填写适屏策略,程序进入后台音乐不暂停,所以我们改点代码,

#include "AppDelegate.h"
#include "SimpleAudioEngine.h"
#include "Layers\GameScene.h"
#include "Layers\StartScene.h" USING_NS_CC;
using namespace CocosDenshion; AppDelegate::AppDelegate() { } AppDelegate::~AppDelegate()
{
} bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::createWithRect("My Game", Rect(0, 0, 480, 320)); //创建指定窗体大小
director->setOpenGLView(glview);
} director->getOpenGLView()->setDesignResolutionSize(1136, 640, ResolutionPolicy::FIXED_HEIGHT); //适屏策略具体能够度娘
// turn on display FPS
director->setDisplayStats(0); // set FPS. the default value is 1.0/60 if you don't call this
director->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object
//auto scene = GameScene::createScene();
auto scene = StartScene::createScene();
// run
director->runWithScene(scene); return true;
} // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground() {
Director::getInstance()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause
SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); //暂停音乐,也就是把这行凝视解除
} // this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
Director::getInstance()->startAnimation(); // if you use SimpleAudioEngine, it must resume here
SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}

ok,这些就是本人主要改动的地方了,假设有自己的想法也是全然能够改动的,看个人了。

关掉并保存我们对这个解决方式的改动,在proj.win32文件夹下删掉sdf和suo这两个后缀文件,而且把cpp-template-default下之前复制过来的cocos2d那个文件夹也删了,让我们的解决方式最初长得还是那样,

这样就完毕了,赶紧创建一个项目来看看,

这里我创建一个叫TestTemp的项目,解决方式就会像这样了,

大功告成,赶紧愉快的写代码吧~~~

最新文章

  1. Web APi之控制器创建过程及原理解析(八)
  2. Python之路【第十九篇】自定义分页实现(模块化)
  3. PHP eof的使用
  4. Linux环境下使用gcc编译,gdb反汇编C语言程序
  5. HDU 4405 Aeroplane chess 概率DP 难度:0
  6. ASCII码排序
  7. ERROR:The requested URL could not be retrieved解决方法
  8. SimpleUrlHandlerMapping用法
  9. MFC对话框
  10. 【转】Ubuntu下配置samba服务器--不错
  11. nyoj 36 最长公共子序列【LCS模板】
  12. hdu 1229 超级大水题
  13. C语言的本质(15)——C语言的函数接口入门
  14. iOS 开发 UI 搭建心得(一)—— 驾驭 StoryBoard
  15. HDU 1568 Fibonacci
  16. 用fildder 查看loveuv 刷流量时通信的数据
  17. 修改Ubuntu Server的分辨率
  18. 创建servlet的三种方式
  19. js常用随手记
  20. 17秋 软件工程 第六次作业 Beta冲刺 Scrum5

热门文章

  1. Foundation 框架 NSString常用总结
  2. table边框不显示
  3. Spring的事务属性
  4. 在C语言中基本数据类型所占的字节数
  5. Append和AppendTo
  6. 【转】VPN服务器配置详解
  7. Python一些字符串判断和转换
  8. 12,C++中 .* 可以出现在什么地方?有何作用?
  9. 帝国cms7.2自定义列表建立tag效果 代码 教程
  10. Spring Boot 属性配置和使用