cocos2dx怎么用

cocos2dx怎么用

图片[1]-cocos2dx怎么用-学吧号

Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。

Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。

手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等操作系统中。Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。cocos2d-x主要功能:流程控制(Flow control):非常容易地管理不同场景(scenes)之间的流程控制。

精灵(Sprites):快速而方便的精灵。动作(Actions):告诉精灵们该做什么。可组合的动作如移动(move)、旋转(rotate)和缩放(scale)等更多。

特效(Effects):特效包括波浪(waves)、旋转(twirl)和透镜(lens)等更多。平面地图(Tiled Maps):支持包括矩形和六边形平面地图。转换(Transitions):从一个场景移动到另外一个不同风格的场景。

菜单(Menus):创建内部菜单。文本渲染(Text Rendering):支持标签和HTML标签动作。文档(Documents):编程指南 + API参考 + 视频教学 + 很多教你如何使用的简单测试例子。

BSD许可:尽管用就是了。基于Pyglet:没有外部的依赖。基于OpenGL:支持硬件加速。cocos2d-x基本介绍:Cocos2d-x是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。

2015年2月,触控科技正式推出了游戏开发一站式解决方案cocos,将Cocos 2d-x、Cocos Studio、Cocos Code IDE等框架及工具整合在一起。Cocos2d-x核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、Windows, Mac OSX 3及Tizen等等,省事省力省成本。Cocos2d-x用户不仅包括个人开发者和游戏开发爱好者,还包括许多知名大公司如Zynga、Wooga、Gamevil、Glu、GREE、Konami、TinyCo、HandyGames、IGG及Disney Mobile等。截止2013年9月,全球基于Cocos2d-x引擎的游戏下载量高达逾15亿,其中许多还占据苹果应用商店(AppStore)和谷歌应用商店(Google Play)排行榜。

同时许多公司如触控、谷歌、微软、ARM、英特尔的工程师在Cocos2d-x领域也非常活跃。另外,Cocos2d-x版本升级困难的问题,是许多开发者的一大苦恼,而经过整合的cocos,解决了Cocos2d-x的这一问题。升级cocos,其相匹配的Cocos2d-x也将自动进行升级,这极大的提高了开发效率,为开发者们带来便利,同时也为Cocos2d-x的进一步发展打下基础。cocos2d-x特点:易于使用:游戏开发者可以把关注焦点放在游戏设置本身,而不必消耗大量时间学习晦涩难懂的OpenGL ES,此外,Cocos2d-x还提供了大量的规范。

高效:Cocos2d-x基于OpenGL ES进行图形渲染,从而让移动设备的GPU性能发挥到极致。灵活:方便扩展,易于集成第三方库。免费:基于MIT协议的免费开源框架,用户可以放心使用,不用担心商业授权的问题。

cocos2dx里面怎么使用cocosbuilder

图片[2]-cocos2dx怎么用-学吧号

2012年过年年回来一直没有可以用于写博客的新收获,以致于担心2013年2月份的博客数量能否达到4篇,以保证我博客头像下锃亮的”恒“。新公司可以直接上网是我这三个月来博客数量倍增的主要原因。

好了不多说了,回归正题。

这里主要是一些除CocosBuilder本身Document之外的一些使用教程。CocosBuilder的基本使用这里面是不会提及的,因为CocosBuilder本身就带了此时市面上最全的说明文档。不习惯看说明文档的童鞋们请硬着头皮看一下,顺便当做英语六级补习课。本文的使用的CocosBuilder版本是CocosBuilder-2.1,基于的Cocos2d-x版本是Cocos2d-x 2.0.4。

本教程将使用CocosBuilder创建Project时自带的HelloCocosBuilder.ccb作为素材,在Cocos2d-x 2.0.4中加载并呈现出来。首先创建一个Cocos2dx的一个模版项目(后面称之为A项目)然后使用CocosBuilder在A项目资源文件夹下面创建一个Project,然后点击【File】-》【Publish】。这样我们就可以在A项目的资源文件夹下找到HelloCocosBuilder.ccbi。

将HelloCocosBuilder.ccbi加入到A项目的xCode项目管理中。将HelloCocosBuilder.ccbi拖入到xCode中,一般放入Resouces文件下面。特别注意,在弹出的提示框中,一定要勾选想要添加到的target(下面附带截图)。

这点很重要,很多windows开发人员(或许就是我)总认为资源不必加入项目文件中(即开发环境中项目文件列表),程序是能够搜索到的,但是xCode开发ios程序时,xCode会把需要的文件拷贝到ios device目录中,如果你不把需要的文件加入项目文件中,那么xCode不会帮你拷贝,到时候生成的app中就没有这个资源。打开AppDelegate.cpp文件,修改applicationDidFinishLaunching函数。[cpp] view plaincopy由于HelloCocosBuilder.ccbi中没有涉及任何外部资源,所以无须添加外部资源到项目文件中。

Cocos2d-x中CocosBuilder文件的加载没有Cocos2d版本的那么好,没有提供一个便利函数,一句话加载,以致于新手需要上网所搜如何加载。上面的加载代码也是我从网上搜到的,然后自己稍微改的精简一些。具体含义我也没有深究,很是好奇的童鞋可以自己探索一下。bool AppDelegate::applicationDidFinishLaunching(){// initialize directorCCDirector *pDirector = CCDirector::sharedDirector();pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());// turn on display FPSpDirector->setDisplayStats(true);// set FPS. the default value is 1.0/60 if you don’t call thispDirector->setAnimationInterval(1.0 / 60);//read ccbi fileCCBReader* pReader = new CCBReader( CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary() );pReader->autorelease();pDirector->runWithScene( pReader->createSceneWithNodeGraphFromFile( “HelloCocosBuilder.ccbi” ) );return true;}【Command】+R,运行程序就能看到Hello CocosBuilder在模拟器中央。

虽然这个教程很简单,但是本人断断续续也搞了一天多,主要出错在于上面的第三步,以及自己建立的CocosBuilder Project文件本身有问题。以后我会在项目中不断挖掘CocosBuilder的用处,然后贴出系列教程。

怎样在UIKit中使用cocos2d-x

图片[3]-cocos2dx怎么用-学吧号

如果你想把 coocs2d-x 折腾进 UIKit (UIVIewController),以下是详细步骤: 0. 废话少说,这里是本文的示例代码: Sample project Cocos2dxOnUikit.zip . 1.我们有一个 UIKit 工程,同时希望在某一个 view controller中显示Cocos2d-x (OpenGL view)。 2. 下载 Cocos2d-x 代码(哥说了句废话,你知道该去哪下载的)3. 解压(废话 again ) 4. 创建工程,如果你不会,推荐看看泰然以往的教程。

5. 移除cocos2dx/platform/目录下的CCImage.cpp 和 CCThread.cpp 6. 打开 xcode 的项目配置,点击 build Settings ,在 “ Library Search Paths ” 参数添加$(SRCROOT)/cocos2dx/platform/third_party/ios/libraries/(为了在cocos2dx中使用curl库)7. 接着,在“ Headers Search Paths ” 参数添加$(SRCROOT)/cocos2dx and $(SDKROOT)/usr/include/libxml2 (为了使用libxml 库) 8. 在 “ Other C++ Flags ” 参数添加-DCC_UNDER_IOS9.从HelloWorld示例工程中拷贝AppDelegate.cpp 和 AppDelegate.h并添加到我们现在这个工程中。

cocos2dx 弱联网 怎么做

图片[4]-cocos2dx怎么用-学吧号

下面是官方给出的教程介绍HttpClient是HTTP客户端的接口。HttpClient封装了各种对象,处理cookies,身份认证,连接管理等。

概念HttpClient的使用一般包含下面6个步骤:创建 HttpRequest 的实例;设置某种连接方法的类型(GET、POST等),这里通过setUrl传入待连接的地址;设置响应回调函数,读取response;添加请求到HttpClient任务队列;释放连接。

无论执行方法是否成功,都必须释放连接;对得到后的内容进行处理。如何使用HttpRequest 实例我们将使用HttpRequest无参数的构造函数,它为大多数情况提供了一个很好的默认设置,所以我们使用它。cocos2d::extension::HttpRequest* request = new cocos2d::extension::HttpRequest();设置连接方法的类型和待连接的地址由HTTP规范定义的各种方法对应各种不同的HttpRequest类。我们将使用Get方法,这是一个简单的方法,它只是简单地取得一个URL,获取URL指向的文档。

request->setRequestType(HttpRequest::Type::GET);request->setUrl(“http://www.httpbin.org/get”);设置回调无论服务器返回怎样的状态,响应主体response body总是可读的,这至关重要。request->setResponseCallback(this,httpresponse_selector(HelloWorld::onHttpComplete));在onHttpComplete里读取响应数据:std::vector *buffer = response->getResponseData();//Get the request data pointer back添加请求到HttpClient任务队列cocos2d::network::HttpClient::getInstance()->send(request);释放连接这是一个可以让整个流程变得完整的关键步骤, 我们必须告诉HttpClient,我们已经完成了连接,并且它现在可以重用。如果不这样做的话,HttpClient将无限期地等待一个连接释放,以便它可以重用。

要释放连接,使用:request->release();处理响应现在,我们已经完成了与HttpClient的交互,可以集中精力做我们需要处理的数据。在这个例子中,我们仅仅将它在控制台上输出。// dump datastd::vector *buffer = response->getResponseData();printf(“Http Test, dump data: “);for (unsigned int i = 0; i <</span> buffer->size(); i++){ printf(“%c”, (*buffer)[i]);}printf(“\n”);如果你需要把response作为一个流来读取它里面的信息,上面的步骤将会同如何解析这个连接结合,当你处理完所有的数据后,关闭输入流,并释放该连接。

GET请求示例下面是一个通过HttpClient的HTTP GET请求的例子。HttpRequest* request = new HttpRequest();request->setUrl(“http://just-make-this-request-failed.com”);request->setRequestType(HttpRequest::Type::GET);request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestCompleted));request->setTag(“GET test111”);cocos2d::network::HttpClient::getInstance()->send(request);request->release();POST请求示例下面将发送一个POST请求到URL“http://httpbin.org/post”。

如何基于cocos2dx3.x实现A星寻路算法

图片[5]-cocos2dx怎么用-学吧号

在学习本篇教程之前,如果你有cocos2d-x的开发经验,将会有所帮助。如果没有也没关系,因为你可以将这里讲解的例子迁移到其他的语言或者框架中。

找到到达你键盘的最短路径,开始吧!Maze猫首先介绍下我们将要在本篇教程中开发的简单游戏。

前往下载本篇教程的工程代码。编译运行工程,你将看到以下画面。在这款游戏中,你扮演着一只小偷猫,在一个由危险的狗守护着的地牢里小心穿行。如果你试图穿过一只狗,他会把你吃掉–除非你可以用骨头去贿赂它!所以在这款游戏中,你的任务是尝试以正确的顺序捡起骨头,然后寻找路线穿过狗逃离。

注意到猫只能水平或者垂直的移动(例如不能斜线移动),并且会从一个方块的中心点移动到另一个中心点。每个方块既可以是可通行的也可以是不可通行的。尝试下这款游戏,看看你能否找到出路!建议你阅读代码以熟悉它的原理。

这是一款相当普通的方块-地图式游戏,我们会在接下来的教程中修改它并使用上A星寻路算法。Maze猫和A星概览正如你所看到的,当你点击地图某处时,猫会沿着你点击的方向跳到相邻的方块上。我们想对程序做修改,让猫持续的往你点击的方块方向前进,就像许多RPGs或者point-and-click冒险类游戏。

让我们看下控制触摸事件代码的工作原理。如果你打开HelloWorldScene.cpp文件,你将看到像下面这样去实现触摸操作:autolistener=EventListenerTouchOneByOne::create();listener->setSwallowTouches(true);listener->onTouchBegan=[this](Touch*touch,Event*event){if(_gameOver){returnfalse;}PointtouchLocation=_tileMap->convertTouchToNodeSpace(touch);_cat->moveToward(touchLocation);returntrue;};_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);你可以看到这里只是对猫精灵调用了一个方法,让猫在方块地图上往你点击的地方移动。我们现在要做的是修改在CatSprite.m文件中的以下方法,寻找到达该点的最短路径,并且开始前进:voidCatSprite::moveToward(constPoint&target){}创建ShortestPathStep类我们开始创建一个内部类,代表路径上的一步操作。

在这种情况下,它是一个方块和由A星算法计算出来的的F,G和Hscores。classShortestPathStep:publiccocos2d::Object{public:ShortestPathStep();~ShortestPathStep();staticShortestPathStep*createWithPosition(constcocos2d::Point&pos);boolinitWithPosition(constcocos2d::Point&pos);intgetFScore()const;boolisEqual(constShortestPathStep*other)const;std::stringgetDescription()const;CC_SYNTHESIZE(cocos2d::Point,_position,Position);CC_SYNTHESIZE(int,_gScore,GScore);CC_SYNTHESIZE(int,_hScore,HScore);CC_SYNTHESIZE(ShortestPathStep*,_parent,Parent);};现在添加以下代码到CatSprite.cpp文件的顶部。CatSprite::ShortestPathStep::ShortestPathStep():_position(Point::ZERO),_gScore(0),_hScore(0),_parent(nullptr){}CatSprite::ShortestPathStep::~ShortestPathStep(){}CatSprite::ShortestPathStep*CatSprite::ShortestPathStep::createWithPosition(constPoint&pos){ShortestPathStep*pRet=newShortestPathStep();if(pRet&&pRet->initWithPosition(pos)){pRet->autorelease();returnpRet;}else{CC_SAFE_DELETE(pRet);returnnullptr;}}boolCatSprite::ShortestPathStep::initWithPosition(constPoint&pos){boolbRet=false;do{this->setPosition(pos);bRet=true;}while(0);returnbRet;}intCatSprite::ShortestPathStep::getFScore()const{returnthis->getGScore()+this->getHScore();}boolCatSprite::ShortestPathStep::isEqual(constCatSprite::ShortestPathStep*other)const{returnthis->getPosition()==other->getPosition();}std::stringCatSprite::ShortestPathStep::getDescription()const{returnStringUtils::format(“pos=[%.0f;%.0f]g=%dh=%df=%d”,this->getPosition().x,this->getPosition().y,this->getGScore(),this->getHScore(),this->getFScore());}正如所见,这是一个很简单的类,记录了以下内容:-方块的坐标-G值(记住,这是开始点到当前点的方块数量)-H值(记住,这是当前点到目标点的方块估算数量)-Parent是它的上一步操作-F值,这是方块的和值(它是G+H的值)这里定义了getDescription方法,以方便调试。创建了isEquals方法,当且仅当两个ShortestPathSteps的方块坐标相同时,它们相等(例如它们代表着相同的方块)。

创建Open和Closed列表打开CatSprite.h文件,添加如下代码:cocos2d::Vector_spOpenSteps;cocos2d::Vector_spClosedSteps;检查开始和结束点重新实现moveToward方法,获取当前方块坐标和目标方块坐标,然后检查是否需要计算一条路径,最后测试目标方块坐标是否可行走的(在这里只有墙壁是不可行走的)。打开CatSprite.cpp文件,修改moveToward方法,为如下:voidCatSprite::moveToward(constPoint&target){PointfromTileCoord=_layer->tileCoordForPosition(this->getPosition());PointtoTileCoord=_layer->tileCoordForPosition(target);if(fromTileCoord==toTileCoord){CCLOG(“You’realreadythere!:P”);return;}if(!_layer->isValidTileCoord(toTileCoord)||_layer->isWallAtTileCoord(toTileCoord)){SimpleAudioEngine::getInstance()->playEffect(“hitWall.wav”);return;}CCLOG(“From:%f,%f”,fromTileCoord.x,fromTileCoord.y);CCLOG(“To:%f,%f”,toTileCoord.x,toTileCoord.y);}编译运行,在地图上进行点击,如果不是点击到墙壁的话,可以在控制台看到如下信息:From:24.000000,0.000000To:20.000000,0.000000其中**From**就是猫的方块坐标,**To**就是所点击的方块坐标。实现A星算法根据算法,第一步是添加当前坐标到open列表。还需要三个辅助方法:-一个方法用来插入一个ShortestPathStep对象到适当的位置(有序的F值)-一个方法用来计算从一个方块到相邻方块的移动数值-一个方法是根据”曼哈顿距离”算法,计算方块的H值打开CatSprite.cpp文件,添加如下方法:voidCatSprite::insertInOpenSteps(CatSprite::ShortestPathStep*step){intstepFScore=step->getFScore();ssize_tcount=_spOpenSteps.size();ssize_ti=0;for(;igetFScore()){break;}}_spOpenSteps.insert(i,step);}intCatSprite::computeHScoreFromCoordToCoord(constPoint&fromCoord,constPoint&toCoord){//忽略了可能在路上的各种障碍returnabs(toCoord.x-fromCoord.x)+abs(toCoord.y-fromCoord.y);}intCatSprite::costToMoveFromStepToAdjacentStep(constShortestPathStep*fromStep,constShortestPathStep*toStep){//因为不能斜着走,而且由于地形就是可行走和不可行走的成本都是一样的//如果能够对角移动,或者有沼泽、山丘等等,那么它必须是不同的return1;}接下来,需要一个方法去获取给定方块的所有相邻可行走方块。

因为在这个游戏中,HelloWorld管理着地图,所以在那里添加方法。打开HelloWorldScene.cpp文件,添加如下方法:PointArray*HelloWorld::walkableAdjacentTilesCoordForTileCoord(constPoint&tileCoord)const{PointArray*tmp=PointArray::create(4);//上Pointp(tileCoord.x,tileCoord.y-1);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}//左p.setPoint(tileCoord.x-1,tileCoord.y);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}//下p.setPoint(tileCoord.x,tileCoord.y+1);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}//右p.setPoint(tileCoord.x+1,tileCoord.y);if(this->isValidTileCoord(p)&&!this->isWallAtTileCoord(p)){tmp->addControlPoint(p);}returntmp;}可以继续CatSprite.cpp中的moveToward方法了,在moveToward方法的后面,添加如下代码:boolpathFound=false;_spOpenSteps.clear();_spClosedSteps.clear();//首先,添加猫的方块坐标到open列表this->insertInOpenSteps(ShortestPathStep::createWithPosition(fromTileCoord));do{//得到最小的F值步骤//因为是有序列表,第一个步骤总是最小的F值ShortestPathStep*currentStep=_spOpenSteps.at(0);//添加当前步骤到closed列表_spClosedSteps.pushBack(currentStep);//将它从open列表里面移除//需要注意的是,如果想要先从open列表里面移除,应小心对象的内存_spOpenSteps.erase(0);//如果当前步骤是目标方块坐标,那么就完成了if(currentStep->getPosition()==toTileCoord){pathFound=true;ShortestPathStep*tmpStep=currentStep;CCLOG(“PATHFOUND:”);do{CCLOG(“%s”,tmpStep->getDescription().c_str());tmpStep=tmpStep->getParent();//倒退}while(tmpStep);//直到没有上一步_spOpenSteps.clear();_spClosedSteps.clear();break;}//得到当前步骤的相邻方块坐标PointArray*adjSteps=_layer->walkableAdjacentTilesCoordForTileCoord(currentStep->getPosition());for(ssize_ti=0;icount();++i){ShortestPathStep*step=ShortestPathStep::createWithPosition(adjSteps->getControlPointAtIndex(i));//检查步骤是不是已经在closed列表if(this->getStepIndex(_spClosedSteps,step)!=-1){continue;}//计算从当前步骤到此步骤的成本intmoveCost=this->costToMoveFromStepToAdjacentStep(currentStep,step);//检查此步骤是否已经在open列表ssize_tindex=this->getStepIndex(_spOpenSteps,step);//不在open列表,添加它if(index==-1){//设置当前步骤作为上一步操作step->setParent(currentStep);//G值等同于上一步的G值+从上一步到这里的成本step->setGScore(currentStep->getGScore()+moveCost);//H值即是从此步骤到目标方块坐标的移动量估算值step->setHScore(this->computeHScoreFromCoordToCoord(step->getPosition(),toTileCoord));//按序添加到open列表this->insertInOpenSteps(step);}else{//获取旧的步骤,其值已经计算过step=_spOpenSteps.at(index);//检查G值是否低于当前步骤到此步骤的值if((currentStep->getGScore()+moveCost)getGScore()){//G值等同于上一步的G值+从上一步到这里的成本step->setGScore(currentStep->getGScore()+moveCost);//因为G值改变了,F值也会跟着改变//所以为了保持open列表有序,需要将此步骤移除,再重新按序插入//在移除之前,需要先保持引用step->retain();//现在可以放心移除,不用担心被释放_spOpenSteps.erase(index);//重新按序插入this->insertInOpenSteps(step);//现在可以释放它了,因为open列表应该持有它step->release();}}}}while(_spOpenSteps.size()>0);if(!pathFound){SimpleAudioEngine::getInstance()->playEffect(“hitWall.wav”);}添加以下方法:ssize_tCatSprite::getStepIndex(constcocos2d::Vector&steps,constCatSprite::ShortestPathStep*step){for(ssize_ti=0;iisEqual(step)){returni;}}return-1;}编译运行,在地图上进行点击,如下图所示:From:24.000000,0.000000To:23.000000,3.000000PATHFOUND:pos=[23;3]g=10h=0f=10pos=[22;3]g=9h=1f=10pos=[21;3]g=8h=2f=10pos=[20;3]g=7h=3f=10pos=[20;2]g=6h=4f=10pos=[20;1]g=5h=5f=10pos=[21;1]g=4h=4f=8pos=[22;1]g=3h=3f=6pos=[23;1]g=2h=2f=4pos=[24;1]g=1h=3f=4pos=[24;0]g=0h=0f=0注意该路径是从后面建立的,所以必须从下往上看猫选择了哪条路径。跟随路径前进现在已经找到了路径,只需让猫跟随前进即可。

THE END
喜欢就支持一下吧
点赞7
温馨提示:

1、本内容转载于网络,版权归原作者所有!
2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
3、本内容若侵犯到你的版权利益,请联系我QQ:243371741,会尽快给予删除处理!