前几天想复习一下cocos2dx和c++,所以网上down了几段代码,不过win32下的工程比较难找,所以找了一些都是mac下的代码,上一篇2048就是其中一个,mac的项目移植到win32下,首先问题就是转码,不过转完码还是不能直接运行的,比如说在cocos2dx2.0时代,回调函数的参数问题,这个在3.0之后因为全新的根类ref出现回调麻烦减少了很多,不过好在源码也是c++的,改的难度也不算大,先看下最后的效果,代码比较完整,几乎游戏该有的部分都实现了,具体代码我就不讲了,后面会直接贴出来,我这么说说里面几个我受益的地方,首先是移植过程中遇到的一个问题,就是数组初始化

这个在mac下的数组定义在win32下就么有办法在vs2012下初始化了,我上网查了一下c++11的特性里面明明有这个的添加,mac下的ide直接对数组进行了初始化,但在vs2012下就不行,所以我们还是回到vs传统的数组初始化方式上我们在cpp中的init里面加入一个for循环来给int mapinfo[9][16];来赋值,其他需要注意的地方就不多了,需要的自己建工程看吧,以前也写过一个塔防游戏,之所以移植这个塔防是因为这个游戏里面使用了一些我认为不错的东西,首先用关卡文件来设定关卡,第一次使用关卡文件的读取方式,这里可以看下,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>levelmap</key><dict><key>mapfile</key><string>tilemap0.tmx</string><key>tildfile</key><string>tiles.png</string><key>bgimg</key><string>playbg.png</string></dict><key>levelinfo</key><dict><key>levelnum</key><integer>1</integer><key>money</key><integer>500</integer><key>npcgroup</key><array><array><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict></array><array><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict></array><array><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict></array><array><dict><key>npc_HP</key><integer>40</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>3</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>40</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>3</string></dict><dict><key>npc_HP</key><integer>30</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>2</string></dict><dict><key>npc_HP</key><integer>10</integer><key>npc_Speed</key><string>0.5</string><key>npc_Price</key><string>100</string><key>npc_Type</key><string>1</string></dict></array></array></dict>
</dict>
</plist>

第一关的关卡文件,读取方式我们看下代码

 //添加背景ValueMap levelInfo=FileUtils::getInstance()->getValueMapFromFile(StringUtils::format("level_00%d.plist",nowLevel));   //获取背景地图std::string bg=levelInfo["levelmap"].asValueMap()["bgimg"].asString();auto sp=Sprite::create(bg);sp->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,(Director::getInstance()->getWinSize().height/2)));this->addChild(sp);//添加地图std::string mapf=levelInfo["levelmap"].asValueMap()["mapfile"].asString();auto map=TMXTiledMap::create(mapf);this->addChild(map);map->setTag(888);//加载所有点initAllPoint(map);产生敌人this->schedule(schedule_selector(GameScene::newEnemy),3);//this->enemyCount=20;auto spritetool=Sprite::createWithSpriteFrameName("toolbg.png");spritetool->setAnchorPoint(Point(0.5f,1));spritetool->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,Director::getInstance()->getWinSize().height));this->addChild(spritetool);spritetool->setTag(2000);//初始化钱int startmoney=levelInfo["levelinfo"].asValueMap()["money"].asInt();this->money=startmoney;//金币auto moneyLabel=Label::createWithBMFont("fonts/bitmapFontChinese.fnt"," ");moneyLabel->setPosition(Vec2(spritetool->getContentSize().width/8,spritetool->getContentSize().height/2));moneyLabel->setAnchorPoint(Point(0,0.5f));moneyLabel->setTag(2002);auto moneyText=std::to_string(money);moneyLabel->setString(moneyText);spritetool->addChild(moneyLabel);//当前关卡一共给多少波, 每波的数量this->levelAllNpc=levelInfo["levelinfo"].asValueMap()["npcgroup"].asValueVector();//怪物总共波数
调用上面读取的文件数据
  //读取关卡信息中的数据,获取当前波数,当前怪物int type=0;int hp=0;if(npcNumber_index<npcNumberCount){type=levelAllNpc.at(this->npcGroup_index).asValueVector().at(npcNumber_index).asValueMap()["npc_Type"].asInt();CCLOG("newEnemytype=%d",type);hp=levelAllNpc.at(this->npcGroup_index).asValueVector().at(npcNumber_index).asValueMap()["npc_HP"].asInt();CCLOG("newEnemyhp=%d",hp);
<pre name="code" class="cpp">price=levelAllNpc.at(this->npcGroup_index).asValueVector().at(npcNumber_index).asValueMap()["npc_Price"].asInt();
speed=levelAllNpc.at(this->npcGroup_index).asValueVector().at(npcNumber_index).asValueMap()["npc_Speed"].asInt();

看一下.h中的定义

int nowLevel;//当前关卡编号int npcGroupCount;//当前关共有多少波怪物int npcNumberCount;//当前波共有多少怪物void initLevel();//初始化当前关卡int npcGroup_index;//当前第几波int npcNumber_index;//当前第几个ValueVector levelAllNpc;//当前关卡的所有怪物定义

使用这种方法大大的简化了程序的工作量,真的很不错,另外,开始菜单使用了

#include "MenuScene.h"
#include"GameScene.h"
Scene * MenuScene::createScene(){auto scene=Scene::create();auto layer=MenuScene::create();scene->addChild(layer);return scene;
}
bool MenuScene:: init(){if(!Layer::init()){return false;}//加载ui编辑器编辑好的uiauto node= GUIReader::getInstance()->widgetFromJsonFile("NewUi_1/NewUi_1.json");//从组件中得到一个josnthis->addChild(node);Button*btStart=(Button*)node->getChildByTag(7);btStart->addTouchEventListener(CC_CALLBACK_2(MenuScene::onclick,this));return true;
}
void MenuScene:: onclick(Ref* obj,Widget::TouchEventType t){switch (t){case Widget::TouchEventType::ENDED:{auto scene=GameScene::createScene();Director::getInstance()->replaceScene(TransitionFlipX::create(0.5f,scene));}break;default:break;}}

cocos stdio1.6来编辑,上面是调用代码,其他方面的代码跟正常情况区别不是很大,我这里直接贴出来就行了, 代码下载点这里

cocos3.5塔防游戏开发---复习cocos2dx结束(明天重启仙剑)相关推荐

  1. unity塔防游戏开发之基于标点法来简易实现敌人路线移动

    unity塔防游戏开发之基于标点法来简易实现敌人路线移动 首先创建一个物体,把它设置为静态物体,给他创建一系列子物体,将这些子物体放在各个路线的转角处,这样就实现标点的目的,然后将这些路标的位置都设置 ...

  2. [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--简介+代码+资源

    学校实训项目需要用cocos2dx做一款塔防游戏,因为时间与制图技术.创意原因无法进行原创,碰巧找到了皇家守卫军这款游戏的图片资源,决定用cocos2dx来重现这款经典塔防游戏. 本项目已完成3分之1 ...

  3. [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--其他

    最后一章,讲一下其他零碎的地方. 防御塔方面,还有炮塔的两个高级塔,例如地震塔,机器人塔.地震塔就是周围敌人全部减少血量,机器人塔就是一个士兵类,炮塔升级成士兵类,实现方式和士兵类似. 法师塔方面,死 ...

  4. [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--敌人(二)之BOSS

    该章节主要介绍游戏中的BOSS 我主要制作了两个BOSS,分别为第6关的神灯和11关的大猩猩 首先,是BOSS的入场动画,例如第六关墙壁倒塌的效果.我们注意到BaseMap中有个虚函数virtual ...

  5. 仿保卫萝卜Unity塔防游戏开发

    文章目录 框架的高层设计 新建项目与项目结构 编写框架 对象池 IReusable interface 知识补充:abstract和virtual的区别 代码实现 UseableObjects 代码实 ...

  6. [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(五)之高级箭塔

    该章节主要介绍高级箭塔 2级和3级箭塔与初级箭塔只是替换了图片并且将攻击力.射程等提高,其他并无区别 高级箭塔也是高级塔中最好设计的,通过替换一些图片,增加例如发光的眼睛,飞翔的老鹰等动画即可. 不同 ...

  7. IOS塔防游戏《坦克对大炮》的开发设计记录

    IOS塔防游戏<坦克对大炮>的开发设计记录 引子 游戏已经在App Store上线几个月了,一直很想写点什么记录一下.真要写的时候,却又发现无从下笔没啥好写的.在2012年进入IOS,对于 ...

  8. 远古守卫/cocos2d-x 源码/塔防游戏/高仿王国保卫战

    下载地址:下载地址 本源码高度模仿IOS游戏王国保卫战,由国外IOS商业开发教程网站raywenderlich内部工程师制作,有非常完整的关卡设计,战斗流程,长达12个关卡,各种敌兵,怪物,箭塔,炮塔 ...

  9. 远古守卫/cocos2d-x 源代码/塔防游戏/高仿王国保卫战

    下载地址:下载地址 本源代码高度模仿IOS游戏王国保卫战,由国外IOS商业开发教程站点raywenderlich内部project师制作,有很完整的关卡设计,战斗流程,长达12个关卡,各种敌兵,怪物, ...

最新文章

  1. 16分钟优化mRNA疫苗稳定性! 百度AI算法LinearDesign问世
  2. 准备把以前在百毒博客写的一些文章搬运过来
  3. 关于精益和敏捷的对话
  4. 乐鑫ESP32完美对标AP6212,国产芯片不缺货,不涨价!牛
  5. 前端学习(2990):vue+element今日头条管理--模块介绍
  6. centos双系统只有linux,Centos添加Windows/Centos双系统启动
  7. mybatis一对多关联查询_Mybatis 一对一、一对多的关联查询 ?
  8. win10如何截屏_win10系统电脑截屏的多种操作方法
  9. 2019年上海地区最新JAVAEE开发面试与笔试题
  10. 建立城市安防系统 打造更安全智慧城市
  11. Qt Design studio使用
  12. WIn7 解决 - ReadyBoost 未启用,因为该计算机的运行速度足够快
  13. 3.16√ 火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作
  14. 开发一个智能对话系统用什么工具?
  15. 应届毕业生:关于户口、档案、报到证、派遣证、就业协议书、劳动合同、社保等
  16. Protobuf是什么
  17. motoxt 1085 android8,Moto(Moto)X XT1085/全网通手机系统介绍评测-ZOL中关村在线
  18. 4G网速变慢?工信部回应:近期全国4G网速整体保持稳定
  19. 7月Python最佳开源项目Top 10
  20. Outlook 2019 for mac(outlook邮箱)

热门文章

  1. ICP算法学习记录(包括基础概念,计算推导)
  2. 虚拟化-SDDC软件定义数据中心
  3. c语言的malloc写法,C语言malloc用法
  4. java入门基础-数组
  5. AI之路(二)——关于统计学习(statistical learning)Part 1 概论
  6. 数字显示压力表的使用注意事项
  7. 使用ren命令批量修改照片名
  8. java根据开始时间和结束时间计算中间间隔日期
  9. 华大单片机低功耗注意事项
  10. c语言关于数组输入的两种方式