你是否以前为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的项目,解决方式就会像这样了,

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

Cocos2d-x 创建自己定义项目模板的更多相关文章

  1. 创建Visual studio项目模板 vstemplate关键点纪要

    from:http://www.cnblogs.com/stickman/p/3454719.html 经过多次的实验,终于完美生成一个.VSIX的项目模板安装包,其中遇到不少问题与挫折,久经goog ...

  2. NPM安装vue-cli,并创建vue+webpack项目模板

    1.安装npm npm 是node.js 的包管理工具, 安装流程地址:https://docs.npmjs.com/cli/install  估计会非常慢,我们可以使用淘宝NPM镜像下载安装:htt ...

  3. 2019-9-2-Visual-Studio-自定义项目模板

    title author date CreateTime categories Visual Studio 自定义项目模板 lindexi 2019-09-02 12:57:38 +0800 2018 ...

  4. 在Visual Studio 2010/2012中 找不到创建WebService的项目模板

    参考文章: http://blog.sina.com.cn/s/blog_6d545999010152wb.html 在 Visual Studio 2010 或者2012的新建 Web 应用程序或者 ...

  5. 通过mvn archetype:generate创建Maven项目模板慢的问题

    通过mvn archetype:generate这种交互方式来创建Maven项目模板的时候,经常会长时间卡在Generating project in Interactive mode这一行提示(图1 ...

  6. 打造自己的.NET Core项目模板

    前言 每个人都有自己习惯的项目结构,有人的喜欢在项目里面建解决方案文件夹:有的人喜欢传统的三层命名:有的人喜欢单一,简单的项目一个csproj就搞定.. 反正就是萝卜青菜,各有所爱. 可能不同的公司对 ...

  7. NET Core项目模板

    打造自己的.NET Core项目模板 https://www.cnblogs.com/catcher1994/p/10061470.html 前言 每个人都有自己习惯的项目结构,有人的喜欢在项目里面建 ...

  8. VS2019 自定义项目模板

    前言: 使用"宇宙最强IDE"开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出.审计日 ...

  9. .NET Core - 自定义项目模板

    前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式--通过创建项目导出为项目模板方式实现.本次将采用dotenet cil(手脚架)来创建项目模板. 那么,我们首先看下当前dotnet 支持的项 ...

随机推荐

  1. ASP.NET页面之间数据传递的几种方法

    1)Request.QueryString   在ASP时代,这个是较常用的方法,到了ASP.NET,好像用的人不多了,但是不管怎么说,这是一个没有过时,且很值得推荐的方法,因为不管是ASP还是ASP ...

  2. 最近adt升级引起的问题

    其实也不知道是什么原因引起的,因为 之前安装的adt就是23.0.3的版本,但是最近突然创建安卓工程时出现了如下问题 D:\workspace\appcompat_v7\res\values-v21\ ...

  3. ORACLE 计算节假日

    create or replace function get_workday(starTime in date,endTime in date) return number is Weekends n ...

  4. C++内联函数与宏定义

    用内联取代宏: 1.内联可调试: 2.可进行类型安全检查或自动类型转换: 3.可访问成员变量. 另外,定义在类声明中的成员函数自动转化为内联函数. 文章(一) 内联函数与宏定义 在C中,常用预处理语句 ...

  5. 1.1. chromium源代码分析 - chromiumframe - 介绍

    本人能力有效,面对chromium庞大的代码就头大.还是先由前辈的chromiumFrame入手. 1. chromeFrame概貌 chromiumFrame是前辈的心血之作,以最小化的方式抽出ch ...

  6. jquery自动识别输入的都是数字

    //自动判断输入的书否为正整数 function wds_purchase_keyup(t) { var val = $(t).val(); -]+$/.test(val) && va ...

  7. 简单的mvvm light 应用

      public  class MainStudentModel:ViewModelBase    { //实体        private StudentModel stu = new Stude ...

  8. Android 开发笔记“程序安装包APK的制作”

    资源来源:http://blog.csdn.net/qualcent/article/details/6959547 完成Android项目后,需要将程序打包成APK文件(Android Packag ...

  9. 神奇的魔法数字0x61c88647

    来源JDK源码,产生的数字分布很均匀 用法代码如下. # -*- coding: utf-8 -*- HASH_INCREMENT = 0x61c88647 def magic_hash(n): fo ...

  10. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...