cocos3.5塔防游戏开发

前端之家收集整理的这篇文章主要介绍了cocos3.5塔防游戏开发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自:http://blog.csdn.net/swordfishx82/article/details/45418031

前几天想复习一下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];来赋值,其他需要注意的地方就不多了,需要的自己建工程看吧,以前也写过一个塔防游戏,之所以移植这个塔防是因为这个游戏里面使用了一些我认为不错的东西,首先用关卡文件来设定关卡,第一次使用关卡文件的读取方式,这里可以看下,

[html] view plain copy@H_404_12@
print@H_404_12@ ?
  1. <?@H_404_12@xml@H_404_12@@H_404_12@version@H_404_12@=@H_404_12@"1.0"@H_404_12@@H_404_12@encoding@H_404_12@=@H_404_12@"UTF-8"@H_404_12@?>@H_404_12@@H_404_12@@H_404_12@
  2. <!DOCTYPEplistPUBLIC"-//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd">@H_404_12@@H_404_12@@H_404_12@
  3. <@H_404_12@plist@H_404_12@@H_404_12@version@H_404_12@=@H_404_12@"1.0"@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  4. <@H_404_12@dict@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  5. <@H_404_12@key@H_404_12@>@H_404_12@levelmap@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  6. <@H_404_12@key@H_404_12@>@H_404_12@mapfile@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  7. <@H_404_12@string@H_404_12@>@H_404_12@tilemap0.tmx@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  8. <@H_404_12@key@H_404_12@>@H_404_12@tildfile@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  9. <@H_404_12@string@H_404_12@>@H_404_12@tiles.png@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  10. <@H_404_12@key@H_404_12@>@H_404_12@bgimg@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  11. <@H_404_12@string@H_404_12@>@H_404_12@playbg.png@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  12. </@H_404_12@dict@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  13. <@H_404_12@key@H_404_12@>@H_404_12@levelinfo@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  14. <@H_404_12@dict@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  15. <@H_404_12@key@H_404_12@>@H_404_12@levelnum@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  16. <@H_404_12@integer@H_404_12@>@H_404_12@1@H_404_12@</@H_404_12@integer@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  17. <@H_404_12@key@H_404_12@>@H_404_12@money@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  18. <@H_404_12@integer@H_404_12@>@H_404_12@500@H_404_12@</@H_404_12@integer@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  19. <@H_404_12@key@H_404_12@>@H_404_12@npcgroup@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  20. <@H_404_12@array@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  21. <@H_404_12@array@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  22. <@H_404_12@key@H_404_12@>@H_404_12@npc_HP@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  23. <@H_404_12@integer@H_404_12@>@H_404_12@10@H_404_12@</@H_404_12@integer@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  24. <@H_404_12@key@H_404_12@>@H_404_12@npc_Speed@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  25. <@H_404_12@string@H_404_12@>@H_404_12@0.5@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  26. <@H_404_12@key@H_404_12@>@H_404_12@npc_Price@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  27. <@H_404_12@string@H_404_12@>@H_404_12@100@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  28. <@H_404_12@key@H_404_12@>@H_404_12@npc_Type@H_404_12@</@H_404_12@key@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  29. <@H_404_12@string@H_404_12@>@H_404_12@1@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  30. </@H_404_12@dict@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  31. </@H_404_12@array@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  32. <@H_404_12@string@H_404_12@>@H_404_12@2@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  33. <@H_404_12@integer@H_404_12@>@H_404_12@30@H_404_12@</@H_404_12@integer@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  34. <@H_404_12@integer@H_404_12@>@H_404_12@40@H_404_12@</@H_404_12@integer@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  35. <@H_404_12@string@H_404_12@>@H_404_12@3@H_404_12@</@H_404_12@string@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  36. </@H_404_12@array@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
  37. </@H_404_12@plist@H_404_12@>@H_404_12@@H_404_12@@H_404_12@
第一关的关卡文件,读取方式我们看下代码@H_404_12@
[cpp] copy@H_404_12@
?
    //添加背景@H_404_12@@H_404_12@@H_404_12@
  1. ValueMaplevelInfo=FileUtils::getInstance()->getValueMapFromFile(StringUtils::format("level_00%d.plist"@H_404_12@,nowLevel));@H_404_12@@H_404_12@
  2. //获取背景地图@H_404_12@@H_404_12@@H_404_12@
  3. std::stringbg=levelInfo["levelmap"@H_404_12@].asValueMap()[@H_404_12@"bgimg"@H_404_12@].asString();@H_404_12@@H_404_12@
  4. autosp=Sprite::create(bg);@H_404_12@
  5. sp->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,(Director::getInstance()->getWinSize().height/2)));@H_404_12@
  6. this@H_404_12@->addChild(sp);@H_404_12@@H_404_12@
  7. @H_404_12@
  8. //添加地图@H_404_12@@H_404_12@@H_404_12@
  9. std::stringmapf=levelInfo["levelmap"@H_404_12@].asValueMap()[@H_404_12@"mapfile"@H_404_12@].asString();@H_404_12@@H_404_12@
  10. automap=TMXTiledMap::create(mapf);@H_404_12@
  11. this@H_404_12@->addChild(map);@H_404_12@@H_404_12@
  12. map->setTag(888);@H_404_12@
  13. //加载所有点@H_404_12@@H_404_12@@H_404_12@
  14. initAllPoint(map);@H_404_12@
  15. ////产生敌人@H_404_12@@H_404_12@@H_404_12@
  16. this@H_404_12@->schedule(schedule_selector(GameScene::newEnemy),3);@H_404_12@@H_404_12@
  17. //this->enemyCount=20;@H_404_12@@H_404_12@@H_404_12@
  18. autospritetool=Sprite::createWithSpriteFrameName("toolbg.png"@H_404_12@);@H_404_12@@H_404_12@
  19. spritetool->setAnchorPoint(Point(0.5f,1));@H_404_12@
  20. spritetool->setPosition(Vec2(Director::getInstance()->getWinSize().width/2,Director::getInstance()->getWinSize().height));@H_404_12@
  21. this@H_404_12@->addChild(spritetool);@H_404_12@@H_404_12@
  22. spritetool->setTag(2000);@H_404_12@
  23. //初始化钱@H_404_12@@H_404_12@@H_404_12@
  24. int@H_404_12@startmoney=levelInfo[@H_404_12@"levelinfo"@H_404_12@].asValueMap()[@H_404_12@"money"@H_404_12@].asInt();@H_404_12@@H_404_12@
  25. this@H_404_12@->money=startmoney;@H_404_12@//金币@H_404_12@@H_404_12@@H_404_12@
  26. automoneyLabel=Label::createWithBMFont("fonts/bitmapFontChinese.fnt"@H_404_12@,@H_404_12@""@H_404_12@);@H_404_12@@H_404_12@
  27. moneyLabel->setPosition(Vec2(spritetool->getContentSize().width/8,spritetool->getContentSize().height/2));@H_404_12@
  28. moneyLabel->setAnchorPoint(Point(0,0.5f));@H_404_12@
  29. moneyLabel->setTag(2002);@H_404_12@
  30. automoneyText=std::to_string(money);@H_404_12@
  31. moneyLabel->setString(moneyText);@H_404_12@
  32. spritetool->addChild(moneyLabel);@H_404_12@
  33. //当前关卡一共给多少波,每波的数量@H_404_12@@H_404_12@@H_404_12@
  34. this@H_404_12@->levelAllNpc=levelInfo[@H_404_12@"levelinfo"@H_404_12@].asValueMap()[@H_404_12@"npcgroup"@H_404_12@].asValueVector();@H_404_12@//怪物总共波数@H_404_12@@H_404_12@@H_404_12@


 

 
看一下.h中的定义 

使用这种方法大大的简化了程序的工作量,真的很不错,另外,开始菜单使用了
copy@H_404_12@
#include"MenuScene.h"@H_404_12@@H_404_12@@H_404_12@
  • #include"GameScene.h"@H_404_12@@H_404_12@@H_404_12@
  • Scene*MenuScene::createScene(){@H_404_12@
  • autoscene=Scene::create();@H_404_12@
  • autolayer=MenuScene::create();@H_404_12@
  • scene->addChild(layer);@H_404_12@
  • return@H_404_12@scene;@H_404_12@@H_404_12@
  • }@H_404_12@
  • bool@H_404_12@MenuScene::init(){@H_404_12@@H_404_12@
  • if@H_404_12@(!Layer::init()){@H_404_12@@H_404_12@
  • return@H_404_12@@H_404_12@false@H_404_12@;@H_404_12@@H_404_12@
  • //加载ui编辑器编辑好的ui@H_404_12@@H_404_12@@H_404_12@
  • autonode=GUIReader::getInstance()->widgetFromJsonFile("NewUi_1/NewUi_1.json"@H_404_12@);@H_404_12@//从组件中得到一个josn@H_404_12@@H_404_12@@H_404_12@
  • this@H_404_12@->addChild(node);@H_404_12@@H_404_12@
  • Button*btStart=(Button*)node->getChildByTag(7);@H_404_12@
  • btStart->addTouchEventListener(CC_CALLBACK_2(MenuScene::onclick,this@H_404_12@));@H_404_12@@H_404_12@
  • return@H_404_12@@H_404_12@true@H_404_12@;@H_404_12@@H_404_12@
  • void@H_404_12@MenuScene::onclick(Ref*obj,Widget::TouchEventTypet){@H_404_12@@H_404_12@
  • switch@H_404_12@(t)@H_404_12@@H_404_12@
  • {@H_404_12@
  • case@H_404_12@Widget::TouchEventType::ENDED:@H_404_12@@H_404_12@
  • autoscene=GameScene::createScene();@H_404_12@
  • Director::getInstance()->replaceScene(TransitionFlipX::create(0.5f,scene));}@H_404_12@
  • break@H_404_12@;@H_404_12@@H_404_12@
  • default@H_404_12@:@H_404_12@@H_404_12@
  • }@H_404_12@
  • }@H_404_12@
  • 猜你在找的Cocos2d-x相关文章