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

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


 

 
看一下.h中的定义 

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

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...