/* 说明:

**1.本次游戏实例是《cocos2d-x游戏开发之旅》上的最后一个游戏,这里用3.0重写并做下笔记

**2.我也问过木头本人啦,他说:随便写。第一别全然照搬代码。第二能够说明是学习笔记---好人

**3.这里用cocos2d-x 3.0版本号重写,非常多地方不同,可是从重写过程中也非常好的学习了cocos2d-x

*/

***每一步相应的全部代码以及用到的资源都会打包在最后给出

***为避免代码过多。每一步的代码都做了标记--一看就晓得是第几步实现的避免出错改不回去(难不成还用Git?)

***能够依据设计思路(好吧,那名字太高大上。实际就是这一步要干啥)先自己实现---cocos2d-x本来就是如此,同样的功能有很多不同实现方法。先自己折腾是蛮不错的。

***为了方便移植到手机上。对于每一步都进行编译android測试;由于非常多时候代码在win32下能够,编译就会出错,给出的代码会是測试过后的。

本次笔记内容:

1、设计思路

2、代码&效果图

3、下次内容预览

4、本次源代码&资源下载

一:设计思路:

1、着手打造游戏Scene,Scene中能够加入GetBackLayer

2、依据最開始的总设计流程图,须要一个最重要的游戏Layer。然后加入英雄和怪物的管理器,这里仅仅弄英雄管理器---也比較复杂

3、英雄管理器继承自Layer?这一步中,我们相应当前级别。载入我们编好的TowerPos,TowerPos是通过精灵展示的炮台,我们要点击炮台能加入英雄在上面,因此,须要触摸机制

4、内容页比較多啦......

二:代码&效果图

完毕了编辑工作之后,就要来正式開始游戏界面啦;GameScene,单独抽离出来。先加入GetBackLayer;当中。GameScene是依据关卡选择时候的级别来createScene的

class GameScene{
public:
static Scene* createScene(int level);
};

.cpp

Scene* GameScene::createScene(int level){
Scene* scene = NULL; scene = Scene::create(); auto getBackLayer = GetBackLayer::create();
scene->addChild(getBackLayer); return scene;
}

那么能够在GameLvlChoose里面的回调函数中,进行场景切换

---------------------------------------------------------------------------------------

此时,就来准备最后一个Layer,也是游戏中最重要的MapLayer;设计思路中,MapLayer带着两个son,那就是英雄管理器。和怪物管理器;

整个游戏就是如此层次分离开来;也是便于扩展;不禁感叹:木头主程不是盖的!!



MapLayer.h

class MapLayer : public Layer{
public:
MapLayer(); ~MapLayer(); static MapLayer* create(int level);
bool init(int level); private:
//**5**
int _curLevel; //**5**载入等级地图
void preLoad(); };

.cpp

MapLayer::MapLayer(){
_curLevel = 1;
}
MapLayer::~MapLayer(){
} MapLayer* MapLayer::create(int level){
MapLayer* mapLayer = new MapLayer();
if(mapLayer && mapLayer->init(level)){
mapLayer->autorelease();
}
else{
CC_SAFE_DELETE(mapLayer);
}
return mapLayer;
} bool MapLayer::init(int level){
_curLevel = level; preLoad(); return true;
} void MapLayer::preLoad(){
auto visibleSize = Director::getInstance()->getVisibleSize(); //add map
__String* sBG = __String::createWithFormat("game/level_%d.jpg",_curLevel);
Sprite* map = Sprite::create(sBG->getCString()); map->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
this->addChild(map);
}

然后在GameScene中加入:

auto mapLayer = MapLayer::create(level);
mapLayer->setTag(Tag_Map);
scene->addChild(mapLayer);

为了不把Backbutton挡住,应该在GetBackLayer之前增加,然后Tag_Map是一个宏定义的Tag,后面会用到,至于宏定义值,随便取也没关系

---------------------------------------------------------------------------------------

这里先撇开怪物不说,先看看英雄管理器。HeroManager;首先注意的是,这个管理器是继承自Layer的。为什么呢?

HeroManager的功能:它会依照当前级别,载入我们事先编好的TowerPos--也就是炮台坐标,然后,对于这些坐标,我们会用一个炮台精灵来展示;我们炮台的目的就是:让你点击炮台之后能加入英雄。那么须要触摸机制,所以这里用继承自Layer的管理器

上马:.h

class HeroManager : public Layer{
public:
HeroManager(); ~HeroManager();
static HeroManager* createWithLevel(int curLevel);
bool initWithLevel(int curLevel);
private:
//**5**
Vector<PosBase*> m_towerPosList; //--------------------------------------------------
//**5**
void createTowerPos(int curLevel); };

.cpp

HeroManager::HeroManager(){
}
HeroManager::~HeroManager(){
} HeroManager* HeroManager::createWithLevel(int curLevel){
HeroManager* heroMgr = new HeroManager();
if(heroMgr && heroMgr->initWithLevel(curLevel)){
heroMgr->autorelease();
}
else{
CC_SAFE_DELETE(heroMgr);
}
return heroMgr;
} bool HeroManager::initWithLevel(int curLevel){
//**5**
createTowerPos(curLevel); //-------------------触摸事件-------------------------------
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true); listener->onTouchBegan = [](Touch* touch,Event* event){
return true;
}; listener->onTouchMoved = [](Touch* touch,Event* event){
}; listener->onTouchEnded = [=](Touch* touch,Event* event){
auto touchPos = touch->getLocationInView();
auto pos = Director::getInstance()->convertToUI(touchPos); CCLOG("touch pos.x is %f, pos.y is %f!",pos.x, pos.y);
}; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this); //------------------------------------------------------------ return true;
} void HeroManager::createTowerPos(int curLevel){
//**5**
__String* towerPosPath = __String::createWithFormat("game/towerPos_Level_%d.plist",curLevel); PosLoadUtil::getInstance()->loadPosWithFile(m_towerPosList,enTowerPos,
towerPosPath->getCString(),this,1,false);//----能够改为true
}

那么这里仅仅完毕了载入坐标点。是看不到什么效果的;??没什么没有炮台精灵?

炮台并非单单用精灵来展示这么简单。

。这个后面解决

那么这里,为了看到点效果,管理器中的createTowerPos函数中,把载入中的调试參数改为 true,然后在MapLayer中的载入地图中,把地图设置透明度;

然后给MapLayer 一个HeroManager* _heroMgr;成员,在init 函数中:

preLoad();

_heroMgr = HeroManager::createWithLevel(_curLevel);
this->addChild(_heroMgr);

那么执行结果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWllZMTczNTMzODMy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="600" height="350" alt="">



三:下次内容

仅仅有点算什么回事?通过精灵展示的炮台呢?点击炮台怎么加入英雄?

四:源代码&资源

----------------------------------

源代码&资源

---------------------------------

个人无知看法。请更正和讨论

cocos2d-x 3.0学习游戏笔记的例子《卡塔防》第五步---开始建立游戏界面的更多相关文章

  1. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第一步---開始界面&amp;关卡选择

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...

  2. 5、Cocos2dx 3.0小游戏开发的例子寻找测试三个简单的介绍和总结

    繁重的劳动开发商,当转载请注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 測试例子简单介绍 Cocos2d-x 为我们提供了 ...

  3. HTML5另类塔防游戏 -《三国战线》公布

    关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...

  4. DirectX 总结和DirectX 9.0 学习笔记

    转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...

  5. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第0步---知识点总结&amp;效果预览&amp;设计思路

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏.这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码:第二能够说 ...

  6. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  7. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. hdcms v5.7.0学习笔记

    hdcms v5.7.0学习笔记 https://note.youdao.com/ynoteshare1/index.html?id=c404d63ac910eb15a440452f73d6a6db& ...

随机推荐

  1. log4j配置文件及nutch中的日志配置 分类: B1_JAVA 2015-02-17 10:58 483人阅读 评论(0) 收藏

    吐槽几句,log4j的坑啊.... (1)CLASSPATH中不能有多个log4j的版本本,否则有有奇形怪状的NoSuchMethod, NoSuchFiled, NoClassDefineFound ...

  2. WCF学习笔记——WCF基础

    一 WCF与SOA SOA是一种通过为所有软件提供服务外观,并将这些服务的WSDL集中发布到一个地方的一种组织企业软件的方法.它通过使用明确定义的接口通过跨越边界传递消息来让多个自治的服务协同工作.S ...

  3. REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE

    参考: http://www.cnblogs.com/scottckt/archive/2012/10/11/2719562.html http://www.jb51.net/article/3842 ...

  4. (转)yum & wget代理设置

    转自 http://www.cnblogs.com/windows/archive/2012/12/14/2817533.html   yum  配置代理服务器访问要设置所有 yum 操作都使用代理服 ...

  5. Android layer-list的属性和使用具体解释

    Android layer-list的属性和使用具体解释.layer-list是用来多个图层堆叠显示的,借这个特性能够做一些特别的效果(比方:阴影.以下的效果等),也能够投机取巧. 1.代码片 < ...

  6. storm原理介绍

    目录 storm原理介绍 一.原理介绍 二.配置 三.并行度 (一)storm拓扑的并行度可以从以下4个维度进行设置: (二)并行度的设置方法 (三)示例 四.分组 五.可靠性 (一)spout (二 ...

  7. 关于Topsort

    Long time no see. 拓扑排序 英文名称:Topological-sort 别称:toposort or  topsort 拓扑排序是干什么的呢 对一个有向无环图(Directed Ac ...

  8. SharedPreferences基础 分类: H1_ANDROID 2013-11-04 22:35 2559人阅读 评论(0) 收藏

    见归档项目:SharedPreferencesDemo.zip 1.对于数据量较小,且有明显的K-V形式的数据而言,适合用SharedPreferences保存.SharedPreferences的数 ...

  9. source insight -i failed reason

    双击.c调用sourceinsight.exe -i "路径" 如果路径太长就会新开一个窗口,测试相同文件,不同路径现象不同.

  10. [转载]Ocelot简易教程(二)之快速开始2

    为什么这篇的标题叫“Ocelot简易教程(二)之快速开始2”呢,因为很多朋友跟我说上一篇“ Ocelot简易教程(二)之快速开始1”内容太少了,只是简单介绍Ocelot的一些简单配置,让Ocelot能 ...