cocos3.5塔防游戏开发---复习cocos2dx结束明天重启仙剑

前几天想复习一下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编辑器编辑好的ui
	auto node= GUIReader::getInstance()->widgetFromJsonFile("NewUi_1/NewUi_1.json");//从组件中得到一个josn
	this->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来编辑,上面是调用代码,其他方面的代码跟正常情况区别不是很大,我这里直接贴出来就行了, 代码下载点这里

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是