如何利用cocos2d 游戏开发实例-x开发一个游戏

初尝 cocos2d-x(1)
配置好开发环境之后,尝试创建一个cocos项目
(1)打开cocos2d-x安装目录,如D:\DIY\cocos2d-x-3.3
看到目录下有可执行文件 download-deps 以及 setup ,先执行download-deps 键入 yes,这样可以避免重复下载库文件,然后执行setup 回车几次即可完成。
(2)运行cmd命令窗口
键入cocos,可看到下面界面:
(3)用命令创建一个cocos项目,键入cocos new 项目名 –p 包名 –l cpp –d路径
如:cocos new test -p package -l cpp -d E:\projects\cocos\TestCpp
打开相应目录如下图:
然后,打开proj.win32文件夹:
可以看到可执行文件 test.sln 它即是新建的工程,在VS2012平台下打开,运行,得到结果:
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:526010次
积分:8751
积分:8751
排名:第1938名
原创:387篇
转载:50篇
评论:142条
文章:210篇
阅读:138008
文章:10篇
阅读:52916
(1)(1)(4)(28)(6)(8)(23)(14)(13)(4)(1)(38)(43)(52)(56)(42)(8)(15)(4)(5)(15)(2)(4)(1)(2)(2)(1)(23)(15)(1)(3)(3)努力加载中,稍等...
暂无新消息
努力加载中,稍等...
已无更多消息...
这些人最近关注了你
努力加载中,稍等...
已无更多消息
努力加载中,稍等...
已无更多消息
Cocos2d-x入门指南
版权所有,禁止匿名转载;禁止商业使用;禁止个人使用。
全球占有率第一的手机游戏引擎, 基于开源协议,的免费跨平台开源引擎, 开发者可以使用、和来进行跨平台游戏的制作,覆盖世界上所有主流的操作系统包括,,,,, 开发的项目还可以在浏览器运行,同时借助技术,浏览器运行效率能够达到与平台运行效率一致,目前在平台,是使用率最高的游戏引擎。平台兼容性达到, 被开发者誉为千万级手游摇篮。本教程将分为三篇,第一篇先使用语言介绍的基础部分,后两篇将带您入门、,您可以根据自己需求选择其中一篇。从学习难度、开发效率、项目发布之后的后期维护、成本等方面来看,个人推荐优先考虑来开发游戏,因为对游戏设计来说,我们花费精力最多的应该是游戏的设计、调整、逻辑这类对性能要求不高的部分,对性能要求高的部分已经由使用实现了,若真的遇到对计算性能要求很高的模块,再考虑使用来重写这个模块,针对该模块进行优化。首先我们使用创建一个语言的项目,打开发布与打包页面(本文基于版本):将发布行为修改为发布到可能需要您安装,本篇文章如无特别说明均使用进行讲解,点击确定:接着会提示您是否使用打开项目,选择是,自动使用打开项目:在打开项目之后,按下编译项目,然后按运行,无意外的话能够看到显示着椰子头形象的窗口:在解决方案管理器下查看我们创建的项目的目录结构,如下所示,这里我们仅关注目录:这四个文件包含了和两个类。其中是为我们创建的一个界面。负责将应用程序生命周期中一些特殊事件回调给我们,让我们有机会对这些特殊事件进行处理,但目前我们能够处理的事件只有三种:l:应用程序加载完成。这里也可以认为是游戏框架的入口,从这里开始初始化我们的游戏框架并启动运行。l:应用程序被隐藏到后台。l:应用程序即将回到前台运行。看看的源码:初始化 设置桌面平台上的设备分辨率设置游戏界面的设计分辨率设置是否显示渲染性能信息,即左下角的那几行字修改游戏的帧率倒数值。即每秒更新多少次界面将添加到搜索路径,此后程序寻找资源时会尝试搜索这个子目录创建一个场景运行场景这里先对游戏项目进行一些配置,然后调用的函数创建一个交给运行。这里的是工程给我提供的一个初始界面,一般我们不需要这个东西。我们可以替换掉这里的对象的创建,然后开始编码我们的程序。如改为直接创建一个对象:创建一个再运行,此时界面上空空如也,只剩下一些调试用的性能信息可以将改为来关闭这些信息:看到这里您可能有点疑惑,是什么呢?别着急,接下来为您介绍。的界面基本结构如下:这幅图的意思呢,就是我们界面上一般只有一个,然后上可以有很多很多个,每个不同的下又可以有很多很多个,循环往复。。。您可能在其他地方见过这样类似的设计,这种设计模式称为组合模式,其优势是:(以下摘自)l它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。使用组合模式来维护界面对象之间的关系,界面对象最终放置在一个以为根节点的树形结构中,可以认为就是用于装载显示页面的一个容器。而在框架下任意可以显示到界面上的对象都是继承于的,如果我们希望将某个对象显示到界面上,那么将对象以某种方式挂到这个界面树上即可。:可能您有接触过其他教程,有些教程会说下再使用类型来组织界面,这可能是个好习惯,但并不是强制的。实际的作用在开始被淡化了,监听各种输入事件不必再依赖,我们可以直接创建对应的来做这部分工作,这样更简单。现在我们来显示点东西,比如这样一张图:首先需要将这个图片文件放到我们的程序能够找到的位置,对于项目,这个位置是在项目下的文件夹,创建的不同语言的项目有所不同,和语言项目默认为项目根目录。注意除了这个路径之外,我们还可以放在这个路径,因为在中使用了添加了一个搜索路径:这样框架寻找文件时就会去搜索路径。注意这个寻找过程是通过组合各个搜索路径的方式来搜索的,这意味着路径越多效率会越低,基于性能考虑这个路径应当越少越好。现在先将这张图片放置到里边,并命名为。然后在刚才创建的地方编写如下代码:创建一个精灵,并添加到节点上使用工厂方法创建一个精灵使用这个为添加一个这里使用一个精灵对象来加载这张图片,并添加到上。编译运行,可以看到我们刚刚添加的图片羞涩地躲在了左下角:将所有要显示的东西都丢在左下角肯定不是我们想要的,我们可以使用这个接口将对象放到其他地方,当然还可以修改对象的旋转属性、颜色值等等,作为对比,我们另外创建一个对象进行设置:设置坐标为,旋转度设置颜色为黄色添加到场景上再次编译运行:当然对于强大的来说肯定不会只有这么几个属性可以用,您可以到这里搜索您使用的对象的更多接口及其用法:,这个是团队维护的文档,三个不同引擎的信息都可以在这里找到。记得添加到收藏夹哦!细心的您可能已经发现,目前为止我们创建对象使用的都是对象的静态方法。您可以认为这个方法就是帮您申请一个会自动释放的对象,当这个对象不再被使用的时候他就会被立即释放清理其所占用的内存(无此问题),此时您就要小心,使用被释放的对象会导致程序崩溃;这是语言的坏处需要使用者维护对象的生命周期,但也是其优点高性能。那么如何管理呢?使用的是引用计数的方式来管理对象的生命周期,即在对象的内部有一个计数器,当外部对象引用他时将这个计数器加使用接口,释放时减使用接口。当计数器值减至零时销毁对象。另外有时我们会希望释放某个对象的一次引用但却不希望导致对象立即销毁(比如在工厂方法中)这时可以调用对象的接口,此后对象就会在当前帧结束之后自动释放一次引用,引用计数为零时还会引起销毁。实际上提供的内存管理机制十分方便有效,对于使用者来说只有少数情况需要直接接触到内存管理相关的问题。必须使用时我们只需要遵循两个原则即可:谁引用谁释放。释放引用成对出现,比如你为了执行某些操作引用了一次对象,那就必须操作完成之后释放对象。比较常见的是将对象从界面树上的一个节点移动到另外一个节点上,因为从界面树上移除节点很大可能会导致对象释放,通常我们会这么做:假定有三个节点,、、,其中是的子节点,现在我们想要将迁移到上:很可能只被界面树结构引用,移除下来前需要保证移除后有其他引用移除放到界面树上。完事好吧没什么事:这里有一点需要注意,移除对象本身我使用的是这个接口,他带有一个类型的参数,当这个参数为的时候,他会帮我们清理节点上的动画和回调等数据。另外一个接口则总是会清理这些数据,注意根据需要选择接口。我们可以用对象来显示文字:创建一个文本对象设置文字设置字体大小添加到上编译运行:可以看到我们添加的几个文字显示到界面上了。同时,受父节点的影响,文本也跟着出现在屏幕中间并发生了一定角度的偏转。为什么会出现这样的现象呢?这里有三个点需要说明:坐标系锚点并不是所有属性都会影响子节点(看清楚啦,文本没灯泡那么黄!)关于坐标系:对于框架,每一个节点对象,包括在内,都有自己的坐标系,且任意对象的坐标系都是从对象的左下角开始:(为了更具体的标识对象的坐标系及讲解接下来的锚点功能,我为对象套上了一层颜色层)同时对象的旋转、倾斜、缩放等会改变、扭曲对象外形的属性也会使得对象的坐标系受到相应的影响。关于锚点:我们没有给对象进行任何坐标相关的设置,但上图中对象的原点并不与灯泡图片的原点重叠。因为决定对象在父节点坐标系位置的除了坐标属性还有锚点属性,你可以把对象想象成一张纸,如果我们用一个图钉将这张纸钉在桌面上,图钉钉住的位置就是锚点,这里桌面就是对象的父节点。当对象旋转、缩放拉伸、倾斜时,它的锚点的位置总是相对父节点不变的。上图中文本对象是以它的中心来与父节点对其的,此时它的锚点为一个的对象。锚点采用比率值来表示,其值为时,锚点的位置在对象的(宽度,高度)位置上。:锚点不影响对象的原点,即原点总是在对象左下角。锚点可以大于或者小于,此时锚点不在对象上。部分属性不会影响子节点:开始的时候,我除了给灯泡对象设置坐标、旋转之外,还设置了颜色值,受此影响后来添加的文本对象在没有设置任何属性的情况下也跟着出现在了屏幕中心并跟着旋转了度。但是文本的颜色值却没有受影响。因为如果父节点的颜色值影响了子节点,那么子节点将没有任何手段来修正这种影响,即有些效果做不了了,为了保持最大的灵活性,允许配置颜色值是否影响子节点。除了颜色之外,透明度也是如此。既然说允许配置,那么我们也可以让颜色值和透明度影响子节点。使用如下两个接口即可:当我们调用以上接口并传入时对象的颜色透明度就能够影响子节点了(就不影响了),如调用上述灯泡对象的接口:可以看到文本对象也跟着变成黄色了:另外需要注意这个属性只会使当前节点的颜色透明度影响子节点,如果你希望一层一层影响下去,那么需要逐层开启这个属性:当我们将几个兄弟关系的节点(拥有相同的父节点)放置到一块的时候,对象会按添加顺序相互遮挡:我们按从左到右的顺序添加如上三个节点,可以发现晚添加的节点会盖在早添加的节点上。决定这个遮挡关系的是渲染顺序,晚渲染的图片会盖在早渲染图片的上边,就好像往您客厅的墙上贴纸一样,如果贴的两张纸有重叠,那么晚贴上去的纸就会盖在此前贴的纸上。当然您也可以通过深度值属性,在图片贴到界面上之后再去控制他们的遮挡关系。在中有两种深度值属性,分别是和,这两个值较大对象会比较小的对象渲染的晚,即深度值大的会盖住深度值小的对象。对于:初始状态下,对象的值为。用来决定兄弟节点之间的遮挡关系,这个属性会影响到对象的子节点。我们将上图中间的对象设置大一点这个对象就贴到其他对象的上边了:我们再给上述对象添加一个子节点,可以发现子节点跟随父节点将灯泡遮挡住:在深度值相同的情况下深度值的设置顺序也会影响他们的遮挡关系,比如在执行完上边的设置之后,再将灯泡的深度值设置成跟一样:
可以发现虽然深度值相同,但后设置的灯泡跑到上边来了:对于:使用来设置深度可以突破界面树的限制,这个属性不传递给子节点,也就是说我们能够修改父子节点的渲染顺序。比如,我们在上边添加了子节点的例子上做点修改,将该节点的设置为:
这样,能够遮挡住所有小于的节点了(包括自己的自子节点):深度值小结:通过以上说明,我们知道能够影响对象遮挡关系的有、、节点的父子关系、的设置顺序、对象的添加顺序五个条件。他们的优先级关系是:父子关系的设置顺序对象的添加顺序。即决定两个对象渲染的先后顺序的方法是首先比较他们的,不相等时先渲染值小的对象,当值相同时,使用父子关系来决定渲染顺序,若两个对象属于同一对象的子节点则尝试使用,若还是相等就使用深度值的设置顺序来决定,这个就不可能相同了。在程序世界里,动画其实就是每隔一小段时间修改一下对象的属性,让对象的位置、形态从一个状态慢慢地变化到另一个状态的过程。虽然每次修改都是瞬时的,但因为人类强大的脑补能力,这种多次连贯的瞬时变化就被理解为动画了。比如在秒内,每隔秒将一个对象的轴坐标值增加像素:是不是感觉得到这个灯泡移动起来了?但我们会明显感到一卡一卡的,这是因为这个修改属性的时间间隔太长了,我们改成一秒变化次,每次像素,再看看效果:效果好多了。为了使动画达到更好的效果,我们可以改成每秒变化次、次、次但基于资源、性能、效率等方面的考虑,这个值并不是越高越好,那么多少合适呢?经过前人大量探索、尝试、对比,他们给出的答案是每秒变化次,即在这个频率下,已经可以达到非常好的动画效果了。当然对于开发者来说决定权在自己手上,我们可以根据自己的需求来修改这个值,比如老板觉得耗电太大了或者他想用某米煎鸡蛋了。。。在框架下,我们也需要配置一个类似的更新频率,这个频率指示了整个游戏界面每秒最多更新多少次(这决定了所有动画的刷新频率上限)。语言下,这个值的设定一般放在函数中,调用导演类的接口进行设定,注意传递的参数是帧率的倒数,如表示帧每秒。以上讲的是动画的原理,接下来我们讲讲为我们提供的动画机制:。分为有限时间的和其他特殊类型的动画。有限时间类型的动画指的是能够在有限时间内运行完成的动作。他又分为持续型()和瞬时型()两种。持续型即这个动画会在一段时间内持续地更新对象的属性,达到动画的效果。更新频率与设置的一致。比如我们希望将某个在坐标(,)位置处的对象在秒的时间里一点一点移动到(,)位置处,那么我们需要一个能够帮我们将对象缓慢移动到某处的东西,为我们提供了这个来实现这个功能,具体代码:
创建一个对象,放置在坐标(,)处创建一个的交给上述对象执行调用来执行运行,可以发现效果跟上边一样:上述使用的动作可以帮我们将某个对象移动到指定坐标,他不需要知道我们的对象的起始坐标,我们只需要将目的坐标和持续时间给他,他就会自动在执行过程中计算每一帧的位置信息并将对象设置到那个位置。除了之外,提供的也可以实现跟上边一样的效果,不同的是这个需要的参数是偏移值,即我们期望将对象移动到偏离原来的位置多少的地方。如我们将上述代码替换为来实现:调用来执行除了上述和函数外还有不少其他属性的持续动作,如和、和、和等等。后缀为和的区别是:后缀的都可以实现在某一段时间里持续地将对象的某个属性改变到某个值;带则是持续地修改对象的属性到跟原来偏移特定值的功能,类型还能够获取他的反向动作。更多的类型请去的文档查阅,这里就不赘述了:其他:获取相反动作:继承于类型的对象都会有一个的接口,这个接口可以获取一个跟原来动作相反的,但基本上只有后缀带的偏移类型动作实现了这个接口:伪代码:假设有这么一个挂载在界面树上的对象以及一个的同一个动作不允许被多个对象执行:的机制并不支持同一个动作被多个节点使用,如下面的代码是错误的。伪代码:假设有、两个挂载界面树上的对象以及一个的错误,程序崩溃!同一个不允许被多个对象执行但绝大多数的都提供了接口,我可以利用这个接口复制一个一模一样的出来:伪代码:假设有、两个挂载界面树上的对象以及一个的正确缓动函数:缓动函数是机制提供的,用于包装其他对象,能够改变其他动作运行过程的速度变化的一种。这种的名称以开头。用法示例:创建一个对象,放置在坐标(,)处创建一个的交给上述对象执行使用包装移动动作,可以实现慢慢加速的效果。执行另外添加一个对象来执行未包装的动作做对比:运行效果如上,这里使用了,可以实现缓慢加速的效果。的函数有两个参数,是期望包装的(持续型动作)类型对象,是加速度变化比率,每个对象的构造函数都有点差别,这里不做赘述,有需要的话请去查阅文档,或者转到这些对象的定义处,每个类的上方都有详细的注释说明这个类的具体信息。循环动作:循环播放某些动画也是一个很常见的需求,比如一个一直旋转的小按钮,不停卖萌的猫猫等。提供了和两个动作来帮助我们解决这个需求。接收一个动作,并可以指定循环的次数,则仅接收一个动作,然后一直重复的执行直到对象销毁或者我们通过调用对象的等方式主动停止动作为止。是继承于下唯一不能预测执行时间的动作(总是为)。比如让一个对象一直旋转:创建一个对象,放置在坐标(,)处创建一个旋转动作使用实现无限旋转的效果执行效果就是界面上有一个不停旋转的图,单纯的图片无法演示,同学们自己试试写一个吧。动作的组合:顺序地执行多个动作:很多时候我们会希望在某个动作执行完毕后再执行一个其他的动作,比如希望对象先执行移动,然后旋转,再移动到其他地方。提供了这个来帮助我们解决这个需求,他的函数接收多个对象,在运行时帮我们按传入顺序执行这些。举个例子,比如让一个坐标为(,)的对象移动到(,),然后旋转。创建一个对象,放置在坐标(,)处分别创建一个和的交由的组合成序列动作执行注意最后一个参数是,的函数能够接受不定个数的,不过最后一个参数需要以结尾,即我们能够利用这个函数顺序执行无穷多个(实际会受限于机器性能)。同时执行多个动作:提供了动作来支持同时执行多个动作,他的构造函数跟相同,比如同时执行旋转和移动动作:创建一个对象,放置在坐标(,)处分别创建一个和的交由的组合成并行动作执行注意这里设置的两个动作的持续时间是不一样的,这样的情况下会同时执行这些动作,并以时间最长的那个作为自己的持续时间,在跟配合的时候需要需要注意这点。:和也是类型,我们也可以任意组合这两者来构造更复杂的动作。瞬时型动作即瞬间完成的动作类型。可以帮我们将程序的坐标、翻转、等等的属性设置为某个特定值,从界面树上移除当前对象,执行某个函数等行为。一般来说即时型动作都是与动作配合使用。举个栗子,使用、搭配瞬时动作实现一个来回走动的小怪物:创建一个的交给上述对象执行也支持执行交互篇介绍处理玩家的输入事件的方法。在手机上,我们能够监听到的输入一般有触摸消息、按键消息以及重力感应传感器的变化信息。框架封装提供了机制,我们可以十分方便的利用这个机制来监听这些变化信息。我们以单点触摸消息来简单介绍下机制的用法:提供了两个不同的来帮助我们处理玩家的触屏消息,他们分别是和。两者的区别是使用我们每次只能得到一个触摸点的信息,不适合处理多点触摸,但处理单点消息简单方便。如果使用类型则每次都可以得到所有的触摸点信息,适合在需要处理多点触摸操作的场景下使用。具体使用方法:首先我们需要创建一个,然后对我们希望处理交互事件回调函数赋值,方便起见,这里我使用的来编写回调函数:如果我们希望处理这一次完整的触摸过程,那么返回。获取导演类的对象,将添加上去,此后就能接受到所有触摸消息了我们将相关的监听函数赋值给,待会触发对应事件的时候,监听函数就会被调用,并传回触摸点信息及事件的具体信息。这里的在用户触摸到屏幕时回调,我们处理完这个回调后需要返回一个布尔值,如果我们对这一次触摸过程(一次触摸指从用户的一个手指接触屏幕到这一手指离开屏幕这一过程)感兴趣,则返回,否则返回。如果返回,那么这次触摸接下来的所有事件我们就收不到了。比如我们写个拖拽操作:添加一个精灵作为拖拽的对象创建触摸时间监听对象:配置监听函数使用对象的获取当前触摸事件的具体坐标,并转换到精灵的坐标系中生成精灵对象的矩形范围返回当前触摸位置是否在矩形范围中获取先前触摸事件的位置,计算偏移值类型重载了各种算数运算符,我们可以直接用加减乘除进行运算将根据偏移值移动对象添加到导演类的:注意使用添加监听对象时,我们需要还传入另外一个类型的参数:类除了接口可以添加监听对象,还有。这两个接口的区别涉及一个优先级的概念,利用传入的节点的深度值来决定优先级,传入的对象深度值越高的的优先级也越高,每次派发事件之前,会根据使用这个接口传入的的深度信息对排序,然后再进行派发,也就是说在传入节点之后,如果改变了的深度值,的优先级也会跟着变化。则直接使用一个值来决定优先级,值越小优先级越高,使用上一个接口添加的相当于这个接口的。在大多数平台上,通过调用平台的来播放背景音乐和音效,并通过封装,给我们提供了一致的接口。但不同平台所支持的音频文件格式是不同的,具体如下表所示:Androidmp3, mid, oggg, wav可以播放android.media.MediaPlayer所支持的所有格式iOSaac, caf, mp3, m4a, wav可以播放AVAudioPlayer所支持的所有格式Windowsmid, mp3, wav无那么如何播放一个音乐文件呢?首先在下我们需要先引用的头文件:然后在合适的地方使用的接口进行播放:在中后边还有和、三个参数,分别代表循环、音量和音效文件的详细信息。在使用完播放接口之后,我们可能还需要在去控制所播放的音效。比如控制音量:需要传入播放音效后得到的值,以标识我们所控制的是哪个音效。具体的更多接口请去官方文档查询::使用完音乐文件之后记得在恰当的时机调用释放其所占用的内存。非常重要的:在不需要音效引擎时,需调用接口以释放其所占用的资源。否则可能造成程序退出后的内存泄漏。一般将这个调用放置在的析构函数中。
分类:(原创)程序新手圈
登录后参与讨论。点击
请勿发表无意义的内容请勿发表重复内容请勿发表交易类内容禁止发表广告宣传贴请使用文明用语其它
淫秽色情政治倾向人身攻击抄袭剽窃广告刷屏恶意挖坟冒充他人其它您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
Cocos2d-x游戏开发实战精解.pdf65页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:100 &&
Cocos2d-x游戏开发实战精解.pdf
你可能关注的文档:
··········
··········
正在加载中,请稍后...cocos2d-x开发从配置到游戏开发实例指南_中国IT实验室专题
||||||||||||||
||||||||||||
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处在上升期,各个版本的变化还是比较大的,单从环境配置来看,从v2.0到v2.2就变化了不少。今天给大家讲解 cocos2d-x 开发配置到实例详细教程!
cocos2d-x 开发实战
  现在cocos2d-x处在上升期,各个版本的变化还是比较大的,单从环境配置来看,从v2.0到v2.2就变化了不少。今天配置了一下V2.2.0环境,创建项目,并进行交叉编译,发现比之前麻烦了不少。这里稍微记录一下。 3.0版本出来了,大概看了下目录和2.2的差不多,环境配置也基本一样......
1.游戏构成我们以超级马里奥游戏作为蓝本来描述一下一个游戏的构成。 1.首先我们需要一个容器来放置游戏元素,每一个关卡都是一个容器,这叫场景。 2.蓝天白云,各种板砖水管,这些是布景,放置在关卡中,通过布景的叠加,构成了游戏的主要背景。 3.主角马里奥兄弟和各种小怪兽,这些叫精灵。这是游戏互动的主要......
虽然cocos2d-x v3.0 alpha版已经出来了,也改进了不少,有兴趣的可以去尝尝鲜。因为后面可能还会配合cocoStudio写一下,而现在v1.0.0.0版本需要配合cocos2d-x v2.2.0使用。所以这里选择了V2.2.0版的cocos2d-x......
  cocos2d-x到底是怎样实现跨平台的呢?这里以Win32和Android为例。1.跨平台项目目录结构先看一下一个项目创建后的目录结构吧!这还是以HelloCpp......
  既然cocos2d-x都帮我们封装好了,使得开发与平台无关,那接下来我们就单纯地开始好好玩游戏吧!这几篇是对cocos2d-x一些基本且重要的元素进行解释和API介绍,之前没有系统的看过API,有时候某些功能引擎都已经提供好了,不知道还是会自己去写。所以全面地了解一下是必须的......
节点类CCNode可以说是游戏元素的祖宗了,基本上我们看得到的游戏元素都是以它为原型进行扩展的。像CCScene,CCLayer,CCSprite,CCMenu,CCSpriteBatchNode等等都是从CCNode继承而来。另外如果我们要自定义精灵,那么从CCNode继承也是一个很不错的选择......
 场景类CCScene和布景类CCLayer都是作为一个容器来使用,这里简单地看下它们的实现:1.场景类:CCSceneCCScene类继承于CCNode,它的实现很简单,就是基本上没添加什么内容…它只是作为一个容器(父节点)的抽象概念存在。对比CCNode差别有......
精灵类CCSprite可以说是游戏的主角了,也是我们平时最常用到的类。1.概况CCSprite本质上就是一个二维图片,是静态的。游戏中的动画只不过是让一张张静态图片快速更换达到的动态效果。CCSprite继承于CCNodeRGBA,并实现了CCTextureProtocol的接口......
精灵也出来了,但是不会动的精灵是木有用的…CCAction就是负责来解决精灵运动的问题。1.概况CCAction直接从CCObject继承而来,注意它代表的是一个动作,是动词。精灵执行了这个动作,而不是名词。CCAction本身并没有什么功能,主要是定义了一些通用函数和虚函数让子类实现多态性......
cocos2d-x采用的是笛卡尔平面坐标系,也就是平面上两条垂直线构成的坐标系,平面上任意一点都可以用(x,y)来表示。(1)就坐标系方向而言,cocos2d-x分为屏幕坐标系和OpenGL坐标系。(2)就节点本身而言,cocos2d-x分为绝对坐标系和相对坐标系......
  如果我们想定时执行一个动作怎么办?CCScheduler帮了我们一个大忙。1.概况 CCNode内部封装了一个CCScheduler *m_pS正是通过它我们可以很轻松地完成一些定时功能,所以定时器是节点所具备的功能......
  之前拿了一些别人的图片素材,是用TexturePacker打包合成的,结果写程序的时候不知道每个合成前小png图的名字是什么,只能一个一个从plist文件中找,然后猜测对应的名字,再进行显示,如果不对,还要继续猜…坑爹啊,效率大大降低了,时间都耗在找图片名字上了。后来决定动手写一个解析plist的软件,就叫它Anti_TexturePacker吧......
  前两天写个游戏,发现CCMenu的布局还是比较有意思的,这里总结一下,以便后用。1.概况 CCMenu是cocos2d-x的菜单类,但它本身并不具备菜单具体属性,而是作为一个父节点,将一些具体类型的菜单添加进去来达到菜单目的的。我们正常会这么使用它:先创建子菜单项CCMenuItem,然后将子菜单项CCMenuItem加入菜单CCMenu,最后把CCMenu加入当前层CCLayer......
  有时候,我们希望实现一个选项卡功能,就是切换tab选项,场景中的内容会跟着改变,但是tab选项卡不动。这是用切换场景的方式没办法做到的。 这里我们就可以使用CCLayerMultiplex来实现这个功能......
  这节介绍一下游戏中帮助界面和关卡选择的设计,其实都是一样的,关键在于美工。这里采用自定义TableView层来实现。1.导入头文件和设定空间因为TableView相关的类是在扩展包里面,所以必须先声明......
  滚动字幕和公告是游戏中经常使用到的元素,本文大致写一下实现方法,至于例子中具体的坐标值,请不要纠结。。。这和美工关系还是蛮大的。我PS技术太搓了......
  cocos2d-x的中文显示其实就是一个UTF-8编码在作怪而已,一种简单的方法就是把文本保存为UTF-8编码即可(注意不是UTF-8 + BOM),建议使用UE,Sublime Text或者EditPlus之类的本文编辑器。这里介绍另一种方法:通过读取xml文件显示中文,这种方法更利于软件的国际化,demo顺便实现了中英文切换......
  现在各种猜成语猜歌名好学霸之类的游戏火的一塌糊涂。本节就介绍下文字的拖拽和定位。1.基本原理其实这只是精灵的简单拖拽和坐标的识别而已。当触摸点在精灵的范围内,精灵可以感应拖动,当触摸结束进行位置判断,如果在有效范围内就进行自动定位......
  CCObject在之前的文章中出现了N次,它扮演了一个老祖宗的角色,但是它到底是做什么的?先从它看看cocos2d-x的拷贝机制吧......
  再看CCObject,剔除上节的拷贝相关,以及Lua脚本相关的属性和方法后,CCObject还剩下什么?1.剩下什么?可以看到整个CCObject就是围绕着m_uReference和m_uAutoReleaseCount在转。这两个变量的解释如下。所以CCObject剩下的其实就是对内存的管理......
  和其他框架一样,cocos2d-x允许我们使用多线程进行编程。cocos2d-x v2.2.0使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上......
  pthread有很多不同应用,官网都有相应的API解释和Sample,这里不再重复,本文主要介绍一个cocos2d-x多线程和同步示例......
  cocos2d-x中和Android,Windows都一样,如果在主线程中处理一些耗时操作,那么主线程就会出现阻塞现象,表现在界面上就是卡住,未响应等情况。为了避免这种情况的出现,我们需要在后台开辟工作线程进行数据的处理,再采用消息传递或者其他形式来通知主线程进行UI变化......
  官方TestCpp有这个demo了,这里还是把它单独拖出来写一下,游戏推广的一个很重要组成就是玩家分享,所以游戏截图就起到很大作用了。截图功能通过CCRenderTexture实现......
  CCArray是从cocos2d中移植过来的,类似于Apple的NSMutableArray,但是比NSMutableArray更为的好用。要注意的是虽然CCArray和CCDictionary可以管理cocos2d-x中绝大多数的类,但是仍然无法替代STL库,STL库更为强有力......
  CCDictionary在cocos2d-x中被大量的应用,比如CCTexureCache,CCSpriteFramCache等等 1.实现原理 1.1.uthash CCDictionary是使用uthash实现的,而过时的CCMutableDictionary则是使用STL实现,就效率而言CCDictionary至少提升了两倍,而且CCDictionary并没有使用C++模版,因此也很容易绑定到脚本......
  之前在遇到这么一个问题,在CCSequence中加入CCRepeatForever,发现其他动作执行没问题,就是CCRepeatForever无法执行。代码并没有问题,很奇怪......
  如何在层间或者场景间进行消息传递,大概是每个初学者都要面对的问题吧。这里介绍cocos2d-x的一种消息/数据传递方式,内置的观察者模式,也称消息通知中心,CCNotificationCenter......
  新手引导是游戏中必备的(除了奇葩的MT用一段动画开始),也是玩家对游戏的第一印象,重要性不言而喻。一般采用的遮罩的形式来突出引导重点,同时屏蔽其他功能。这里简单的介绍一下游戏遮罩的实现,并给出一个示例......
  登录界面一个帐号/密码输入框或者主角命名框是少不了的。这节就来了解一下点九图的输入框的使用。这里只是介绍基础知识,并不进行平台的移植,也不处理跨平台可能出现的问题......
  这里采用Apache+php搭建了一个简易服务器,服务端用php语言,客户端采用cocos2d-x的CCHttpClient类通过http方式访问服务端资源。模拟了cocos2d-x提交账户和密码到服务端,服务端校验帐号密码,如果正确返回客户端成功登录,如果错误则返回错误信息,同时在服务端后台保存登录log......
  cocos2d-x中对xml的解析是采用的TinyXML库,而对plist的解析同时结合了CCDictionary来处理,这里简单介绍下cocos2d-x中解析xml的两种方式,也是常用的xml两个C++解析库:TinyXML和RapidXML.xml被设计用于数据存储和传输,重点是数据内容本身,而不像html,用于表现数据......
  手游《我叫MT》一开始会弹出一个游戏公告,有玩过的肯定都蛮熟悉的,这就是webview,就是一个网页。由于webview和平台相关,这里就介绍下cocos2d-x如何嵌入andorid的webview控件,在cocos2d-x中显示网页......
  最近忙出翔了,这年过的也揪心。好久没来更新博客了,今天就来写一写cocos2d-x中图形的绘制......
  1.概述 先上大会现场演示图: 2.Sprite3D扩展 2.1. Sprite3D sprite3D扩展目前可以支持加载静态obj模型......
  前几天看到cocos2d-x官网论坛让各种姿势的flappy bird霸占了,矮油真受不鸟,你们够啦!!!今天准备用一个贴来秒杀你们。准备好了么。。。放图镇楼......
  Cocos2d-x的粒子系统是通过加载plist生成的。plist包含两部分内容:粒子系统属性和粒子纹理。然而每次调用create都会对plist进行读取解析,如果重复地使用同一个粒子效果,这样的调用明显是低效冗余的。所以我们要做的是,将粒子系统属性和粒子纹理分别抽出......
  1.安卓 NDK-STACK tool
NDK-Stack 是一个非常易用的工具,它通过将信息显示到adb logcat中来辅助你分析堆栈追踪,然后用相应的值(哪篇源码的哪一行)来替代静态链接库中的地址......
  3.0的截屏和2.x的截屏基本上相同,都是利用RenderTexture来处理,在渲染之前调用call函数,然后调用Cocos的场景visit函数对其进行渲染,渲染结......
  有小伙伴提出了这个问题,其实GLProgramCocos2d-x引擎自带了。完全可以直接拿来用。先上图吧。使用opengl前后的对比:......

我要回帖

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

 

随机推荐