自学cocos2d cocos2dx棋牌游戏开发发应该按什么步骤进行

想学习cocos2d-x用C++做游戏开发,27岁了,身体残疾,从零学起可以吗?_百度知道如何学习 cocos2d-x_百度知道学习游戏开发的两个方向 Cocos2d
学习游戏开发的两个方向 Cocos2d
【伍一峰的回答(26票)】:
刚好我现在同时在开发两个2D游戏,一个是用,一个是用Unity3d。
对于“学习”而言,
Cocos2d-x是比较好理解的。它是传统的OOP结构,对于有编程经验的人来说,是最好不过了。就连Unity3d上,也有一个很火的2D框架,Futile,是模仿Cocos2d-x的架构和代码风格。从Cocos2d-x上手接触一下游戏引擎,是一个不错的选择。
而Unity3d是Component-Based结构,对于OOP背景的程序员来说,一开始会觉得别扭。而且Unity3d有很多针对3d模型、3d动画、优化等等的商用功能,对于初学者来说会有点overwhelming的感觉。而且无论如何使用Unity3d,总需要在editor里进行大量操作,对理解游戏引擎和代码架构来说,并不是一个很好的方式。
然而,从“开发”的角度来说,
Cocos2d-x正如
所说,是一个“纯正”的引擎——仅仅只是代码库。虽然可以利用CocosBuilder和其他一些工具进行图形化操作,但效率始终不够Unity3d高。而且暴露过多的底层代码,对于研究是一件大大的好事,但是对于创作而言,未必是福音。
而Unity3d则是一个高效的IDE+代码库。它很好地封装了底层代码,提供许多简便的图形操作,还有商业级的高级功能。对于开发而言,我认为是更好地选择。之前大多数开发者对Unity3d的认识还停留在3D开发,但2013年末的2D支持让更多人选择Unity3d进行2D开发。
所以我的结论是,通过Cocos2d-x或者是Unity3d上的Futile框架来入门,熟悉之后再过渡到Unity3d进行开发。:)
【左文的回答(12票)】:
我推荐-x 现在手机游戏市场前10位有7位都是cocos2d-x开发, 开源、跨平台、MIT许可等等,当然适合2d游戏,3d游戏还是用unity;我重点介绍cocos2d-x
Window平台下 C++语言用 Visual Studio ,官方有UI编辑器CocoStudio,苹果系统不太熟
-------------其他独立的工具----------
位图字体工具Bitmap Font Tools
粒子编辑工具Particle Editing Tools
物理编辑工具Physics Editing Tools
场景编辑工具Scene Editing Tools
纹理地图集工具Texture Atlas Tools
瓦片地图编辑工具Tilemap Editing Tools
声音特效编辑工具Audio Effect Editing Tools
背景音乐编辑工具Background Music Editing Tools
(MAC 系统自带)
BOX2D多边形定义工具VertexHelper
GIF动画帧导出工具Ulead GIF Animator
如果开发者熟悉javascript ,lua编程语言,推荐cocos2d-x editor;我在网上查资料无意间找到的,不得不承认高手在民间,我现在在使用,确实强大,可惜人气还是少了点,希望工具开发者更新更多例子和教程。下面是工具创造者写的简介,我就直接贴在下面了,尽量看原文吧,我很懒,不想一张一张贴图片,麻烦。
原文csdn地址:
笔者学java ,android,javascript出身,近期开始学习手机,由于手游开发是多平台,所以深思熟虑选择cocos2d-x作为开发游戏引擎。
但遇到如下一些问题,
其一,cocos2d-x开发平台很多是ios系统上完成的,笔者熟悉window系统,不熟悉ios;
其二, window系统上主流是使用开发语言c++完成,而且要使用烦人的visual studio,速度卡的半死;
其三,cocos2d-x场景代码编辑是分开的,其他动画,字体,粒子,物理,地图等等都是独立的作为一个工具存在,而且调试模拟不方便
其四,cocos2d-x 对于javascript脚本语言开发没有很好的集成开发工具
经过大量的资料寻找都没有找到很好的选择方案,最终决定自己开发制作一套有效的集成游戏开发工具。根据我的条件,满足window系统上,javascript脚本语言,基于cocos2d-x跨平台游戏引擎, 集合代码编辑,场景设计,动画制作,字体设计,还有粒子,物理系统,地图等等的,而且调试方便,和实时模拟器。
功夫不负有心人,经过几个月的努力,终于这套游戏开发工具初见雏形,我给他命名为 cocos2d-x editor ,简称 CE,经过不断的提升和尝试,我用这套工具开发了各种手机游戏,有跑酷,消除,益智,塔防,格斗等等游戏,运行于各大手游平台,让开发游戏更加快捷方便。开发一款小型的游戏,在设计素材具备的条件下,笔者曾经保持一个礼拜开发一款游戏的记录。
上面也说过,笔者出身android ,以前使用开发android的工具是intellij idea,就地取物,这套工具是基于idea上的插件存在,工具免费。
工具特色:
1. 支持跨平台,IDEA是用JAVA开发的开发工具,可运行在各种主流操作系统上,目前CE在Windows上经过了大量的可用测试,接下来会针对Mac,Linux系统进行测试完善。
2.支持CCB的所有功能,可进行场景,界面,动画编辑。
3.支持Javascript,Lua脚本开发
4.支持集成贴图制作功能
5.支持字体编辑功能
6 支持粒子系统
7 支持tieldmap地图
8.支持Javascript调试
9.支持本地运行,可以实时看到开发的效果
10,支持游戏简单框架
【kubisoft的回答(6票)】:
unity更好学。集成开发环境,脚本写代码。
cocos2d-x是让人头大的c++,也没有集成开发环境,需要自己寻找各种编辑器。
----------------
都是免费的呀,只是一个开源一个不开源而已。
至于脚本,服务器开发也用各种脚本语言呀,RoR,JS,干嘛要用c++?
我两者都在工作中用过。
【知乎用户的回答(9票)】:
把这两个东西放在一起比即使不严格说也是没有办法说的。Cocos2d-x是个渲染引擎,专注2D游戏(即使内部利用3D的很多技术)。而Unity是个解决方案,不单是渲染引擎,早先专注于3D应用的开发;最近因为它一个2D插件(用来帮助开发者制作2D游戏)在用户需求中还是比较强烈的,战略性的官方开始把这个插件的功能官方化(官方开始制作2D功能的模块),因此可以说由把Cocos2d-x的功能也在融合进来。这个是概念上的澄清。
基于概念回到问题,学习这两个东西,并不是两个技术的方向,而是两个游戏开发类型的方向。因为Unity如果弄得很通,Cocos2d-x就是个子集(仅负责渲染管理)。我只能说,对于刚入门的,如果你不是只想专注于2D游戏,那么,完全可以从Unity入手,理由:
1、完整的解决方案,学好一个,其他的东西上手非常快;
2、海量的学习资料;
3、没有C++的繁琐,完全可以专注于技术点的学习;
学习难度的话,我想C++如果好的话,Cocos2d-x相对小一点,涉及功能少很多,所以,相对简单;但是C++如果不会或者不好,则另当别论。
【九天雁翎的回答(4票)】:
cocos2d-x和unity3d要真的在技术选型的时候比较, 其他还真是各有千秋, 我觉得主要还是根据团队的性质和要开发游戏的类型吧. 一般情况下, 我感觉是倾向于unity3d, 特别是在最近的unity3d中, 已经有了官方的2d模块, 开发起来会更爽, 开发工具的配合也更加强大, 开发效率也更高一些.
但是cocos2d-x这种开源的引擎也仍然还是有前途, 毕竟源代码都在自己手中, 虽然各类工具的组合, 选择可能会挺麻烦的, 但是假如游戏本身是一个比较奇特的类型, 想要更多的定制, 或者游戏本身想更进一步的压榨平台的性能或者非常强化的利用某个平台的新特性, 这个时候cocos2d-x几乎是唯一的选择.
【RonJim的回答(1票)】:
cocos2d-x支持跨平台,并且是开源的。而且大部分参与到cocos2d开源项目的多是中国人。网络上也有不少的学习资料。
1. 从学习成本上考虑。因为开源,所以接受的程度应该更大一些,不会对学习开发造成压力。如果哪天对游戏开发无爱了,也不会因为曾今累计付出了这么多成本而犹豫不决。
2. 从开发语言上来讲。我觉得每个游戏开发者是必须对C++了解的。你想想,那些搞网游的,在Linux环境下跑服务端引擎的,怎么可能不会用到C++呢?不过,这都是个循序渐进的过程。如果觉得C++难学,可以先学习一些脚本语言,做些小工具,比如批量进行文件操作、查询LOG。这些函数式编程能快速让你在编程中找到乐趣的。但是,恳请LZ不要仅仅局限于脚本,这只是皮毛。
3. 从图形化来讲。unity的强势在于3D,cocos2d的强势(顾名思义)在于2d。cocos2d诞生的时间比较晚,也就是利用2d领域的优势不断的壮大自己的影响力的。LZ从难度比较低的2d编程开始学习游戏开发呢?
【知乎用户的回答(1票)】:
决定游戏优劣的绝不是他是2d还是3d,而应该是游戏性。尤其是对移动端来说。
【杨利华的回答(1票)】:
cocos虽然可以做3d 但是初级。 u3d可以做2d 但肯定不是初级。 而且相对入门的来说 js和c#更亲民
【gggxxx的回答(1票)】:
unity是更好的选择。cocos2d-x唯一的优势是免费,但是unity的费用根本就不贵啊,几乎可以忽略。
至于做游戏开发,什么工具都是其次的,重点是自己要学会游戏设计。你看别人用flash开发游戏作品不也很优秀么?
【UnICorN的回答(0票)】:
cocos2d-x没尝试过,不过unity绝对是值得推荐的,随着版本的增加,unity越来越倾向于图形化的编程
【daige的回答(0票)】:
其实不需要纠结,两个都学。
【王小康的回答(0票)】:
两个都学学不就行了,C++用好了也很爽的。
发表评论:
馆藏&52584
TA的推荐TA的最新馆藏自学cocos2d 游戏开发应该按什么步骤进行_百度知道使用C++进行Cocos2d-x游戏开发入门过程中的要点解析
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了使用C++进行Cocos2d-x游戏开发入门过程中的要点解析,主要针对画面变化以及触摸响应方面,需要的朋友可以参考下
总结了下,新手引导的要点有以下几个:
画面的变化.
触摸和按钮响应.
逻辑处理及代码组织.
下面我们就详细讲述这几个要点:
一.画面的变化.
对个这个不同的游戏的做法不尽相同,归结起来大概有这么几种:
1.画面整体变暗
这个比较简单,cocos2d就有现成接口:
CCSize visibleSize = CCDirector::sharedDirector()-&getVisibleSize();
//第一个参数是颜色ccc4(r,g,b,a) a取值(0~255),越大越不透明 下面两个参数为宽高,不传默认为屏幕大小
CCLayerColor* pLayer=CCLayerColor::create(ccc4(0,0,0,200),visibleSize.width,visibleSize.height);
//CCLayerColor* pLayer=CCLayerColor::create(ccc4(0,0,0,200));
addChild(pLayer,100);
然后你可以在这层之上添加精灵,最后的效果可能是这个样子的:
注:图片源自网络,如果有版权问题~你丫去死吧! 请联系我!
2.局部高亮
比较简单的方法是准备几张张局部高亮的图片,随着引导进度变化而切换!优点是可以做的比较精美,缺点是资源量会比较大!另一种方法是在画面整体变暗的基础上抠掉部分区域,还好cocos2d提供了CCClippingNode接口(2.1+版)!
CCClippingNode类比较复杂,但我们只用明白两个东西就好:一个是CCClippingNode的Stencil,一个CCClippingNode的Child,怎么理解呢?请看下图:
这个东西相信大家都有印象吧,上面的图案(镂空部分)就是 CCClippingNode的Stencil(模板),实体部分就是CCClippingNode的child(底板),是不是很好明白,让我们用代码来实现吧:
//创建cliper对象
CCClippingNode* pClip=CCClippingNode::create();
addChild(pClip);
//加入灰色的底板
CCLayerColor* pColor=CCLayerColor::create(ccc4(0,0,0,200));
pClip-&addChild(pColor);
让我来加入模板:
//创建drawnode对象
CCDrawNode *m_pAA=CCDrawNode::create();
static ccColor4F green = {0, 1, 0, 1};
static CCPoint rect[4]={ccp(-50,50),ccp(50,50),ccp(50,-50),ccp(-50,-50)};
//用上面的数据保存一个100x100的矩形
m_pAA-&drawPolygon(rect, 4, green, 0, green);
//设置到屏幕的中心
m_pAA-&setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
//设置为pclip的模板
pClip-&setStencil(m_pAA);
CCDrawNode是用来绘制几何图形的,drawPolygon使用绘制多边形,参数为顶点数组,顶点数量,边框宽度,和填充颜色!这里要注意一点:千万不要addChild(m_pAA);因为一旦addchild,m_pAA就会被绘制出来,我们是要用它做剪裁!他会在CCClippingNode内部被使用!
我们会看到这样的效果:
额,貌似和我们想想的不太一样啊,为什么呢?那是因为CCClippingNode有一个选项是是否反向,既显示Stencil呢还是child减去Stencil的部分!默认为显示显示镂空(Stencil)部分(false),因此我们要改变选项:
//是否反向?
pClip-&setInverted(true);
效果如下,是不是很棒:
3.组合效果(将2的矩形改成圆,再加上图片)
让我们先看这张图片,是不是很棒?右下角黄色矩形区域是高亮的,在配上图片说明,很不错的效果!
让我们来实现类似的效果吧,用到的资源:
//创建cliper
CCClippingNode* pClip=CCClippingNode::create();
pClip-&setInverted(true);
addChild(pClip);
//添加底板
CCLayerColor* pColor=CCLayerColor::create(ccc4(0,0,0,200));
pClip-&addChild(pColor);
//绘制圆形区域
static ccColor4F green = {0, 1, 0, 1};//顶点颜色,这里我们没有实质上没有绘制,所以看不出颜色
float fRadius=55.0f;//圆的半径
const int nCount=100;//圆形其实可以看做正多边形,我们这里用正100边型来模拟园
const float coef = 2.0f * (float)M_PI/nC//计算每两个相邻顶点与中心的夹角
static CCPoint circle[nCount];//顶点数组
for(unsigned int i = 0;i &nC i++) {
float rads = i*//弧度
circle[i].x = fRadius * cosf(rads);//对应顶点的x
circle[i].y = fRadius * sinf(rads);//对应顶点的y
CCDrawNode *pStencil=CCDrawNode::create();
pStencil-&drawPolygon(circle, nCount, green, 0, green);//绘制这个多边形!
pStencil-&runAction(CCRepeatForever::create(CCSequence::createWithTwoActions(CCScaleBy::create(0.05f, 0.95f),
CCScaleTo::create(0.125f, 1))));
pStencil-&setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
//设这模板
pClip-&setStencil(pStencil);
//添加圆和手的图片
CCSprite*pCircle=CCSprite::create("circle.png");
pCircle-&setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
pCircle-&runAction(CCRepeatForever::create(CCSequence::createWithTwoActions(CCScaleBy::create(0.05f, 0.95f),
CCScaleTo::create(0.125f, 1))));
addChild(pCircle);
CCSprite* pHand=CCSprite::create("hand.png");
pHand-&setAnchorPoint(ccp(0.0f,1.0f));
pHand-&setPosition(ccp(pCircle-&getContentSize().width/2,pCircle-&getContentSize().height/2));
pCircle-&addChild(pHand);
上面是全部的代码,效果图如下(动态的会更好)没有加圆圈和手之前和之后:
那么如何改变高亮区域得位置呢?很简单,只用改变pStencil的位置即可!可以考虑记为成员变量在ccTouchesBegan中改变位置,这样就会高亮区域就会跟着你的鼠标走啦!
二.触摸和按钮响应
1.开启触摸 阻止穿透响应 判断落点
让我们继续看下面的这张图片:
这张图片中应该只有右下角的”冒险”按钮能够响应的到,在这里说下思路:
为了让其他区域的按钮响应不到,我们应该提高上层(CClayer)的响应优先级为-128和按钮一样,这样的话如果上层(CClayer)后加入游戏addchild的话,会先收到触摸消息.
在收到触摸消息ccTouchBegan时,判断点击的地方是否在黄色矩形区域中,在的话return false 交给下层的按钮去响应,否则return true 阻止消息继续传递.
下面是代码片段:
1).开启触摸
bool CTeachLayer::init()
if (!CCLayer::init())
setTouchEnabled(true);
2).提升触摸响应优先级为-128
void CTeachLayer::registerWithTouchDispatcher()
//使用-128和CCMenu优先级相同,并且吞掉事件true//
CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this, -128, true);
CCLayer::registerWithTouchDispatcher();
3).在ccTouchBegan判断触点
bool CTeachLayer::ccTouchBegan( CCTouch* pTouch, CCEvent* pEvent )
//得到触摸位置
CCPoint touchPoint = pTouch-&getLocation();
//声明一个右下角100x50的矩形
CCRect m_obRect=CCRectMake(
CCDirector::sharedDirector()-&getVisibleSize().width-100,
CCDirector::sharedDirector()-&getVisibleSize().height-50,
//判断点是否在矩形中
if (m_obRect.containsPoint(touchPoint))
大功告成,快去试一下吧!
2.精确命中
手机上和电脑上的触摸事件的区别在于:电脑上我们是用鼠标点击,而手机上使用手指去摁,触摸的精度的高低不言而喻!让我们来看下面这张图片:
让我们看右上角的X号按钮,在手机上点击它来说应该是很困难的!他的真实尺寸应该是红色矩形的区域(假设:50x50),为了让玩家在引导时,能够很方便的点击到它,我们将实际的可触摸区域设置为蓝色区域(假设:100x100),这样应该很好点到了吧!
这样会有一个新的问题,如果点击到红色和蓝色之间的区域,下面的x按钮时响应不到的,那么怎么办呢?我们需要修改touch的数据(设置为按钮的正中心),然后touch事件将会以新的数据向下传递!这样下面的按钮就能响应到了!
让我们看看代码吧:
bool CTeachLayer::ccTouchBegan( CCTouch* pTouch, CCEvent* pEvent )
CCPoint touchPoint = pTouch-&getLocation();
if (!CGlobal::s_bTeach)
//假设按钮在(300,200)的位置,那么蓝色矩形如下:
CCRect m_obRect=CCRectMake(
if (m_obRect.containsPoint(touchPoint))
//得到蓝色矩形的中心点(300,200)
CCPoint pos=ccp(m_obRect.getMidX(),m_obRect.getMidY());
//这里要转化为UI坐标系(左上角为0,0点)
pos=CCDirector::sharedDirector()-&convertToUI(pos);
//设置触摸信息
pTouch-&setTouchInfo(pTouch-&getID(),pos.x,pos.y);
三.逻辑处理及代码组织
这里我大概说下新手引导的架构,代码肯定贴不出来,太多太乱,说的不对的地方,欢迎大家拍砖吐槽!&_&
1.首先创建了一个CTeachLayer继承自CCLayer,添加到游戏的最上层(UI层之上),记住,要先添加游戏的其层,最后添加CTeachLayer,可以保存全局指针!
2.用一个枚举记下你要引导的所有步骤,在根据枚举值去设置高亮的位置及触摸区域!可以记下当前引导的进度,以方便下次继续引导!
3.游戏逻辑中免不了要判断引导(例:出第3波怪的时候引导玩家使用清屏道具),用全局的指针去设置引导的步骤!
4.引导完成后移除CTeachLayer,游戏开始!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 cocos2d游戏开发教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信