Cocos常见问题解答

2015.1.29 技术干货 by cocos

【初级】

问:Cocos是什么,可以做什么,从哪里下载?

Cocos是由触控科技推出的游戏开发一站式解决方案,包含了从新建立项、游戏制作、到打包上线的全套流程。开发者可以通过cocos快速生成代码、编辑资源和动画,最终输出适合于多个平台的游戏产品。

下载地址: http://www.cocos.com/downloads/

问:相比其他工具,cocos的优势是什么?

游戏开发一站式解决方案, 低成本、高效率:

Cocos提供了全套的引擎和开发工具,涵盖从前期设计、资源制作、开发调试、打包上线全套的解决方案。Cocos重点优化了工作流,规范了整个游戏开发流程,降低沟通成本,提高开发效率。

高性能,一次制作,多终端平台共享

Cocos不断的优化游戏性能,以保证高帧速率下可以获得更华丽的效果;即使是山寨千元机,运行华丽特效丝毫不卡顿,让您的游戏可以得到尽情的发挥。

跨平台特性确保一次制作,全平台支持。无需为后期移植耗尽人力和时间,极大的降低了时间成本,确保游戏不会错过珍贵的黄金上线档期。

Windows与Mac同步发布更新,团队协作更容易:

目前大部分开发团队根据不同需求会在不同的操作系统下工作,而一套可以运行在多个平台的游戏引擎显得至关重要。Cocos同时支持Windows和Mac操作系统,功能完全同步。提升团队协作便捷性,不再为了配合而频繁的切换系统或者使用双系统。同时会降低开发团队的硬件成本(Mac机要比PC贵3倍)。

丰富的插件素材库,游戏开发更灵活更便捷:

Cocos开放了强大的扩展功能并推出了Cocos Store,提供了插件、资源、工具、素材等丰富的资源,为用户的开发提供了更大的灵活性。Cocos Store将为用户提供了一个自由的平台,连接全球的开发者,用户可以获得和分享自己的成果。开发者将不会为某个技术难关而烦恼,也不会为某个功能而彻夜加班,Cocos Store会持续的收集和提供各种解决方案,建立一个共赢的平台。

问:如何导入资源?

答:方法1:通过打开菜单栏的”文件”-“导入”-“导入资源”项目,然后选择对应的文件进行导入。

方法2:将资源文件拖放到cocos的资源面板。

问:如何移动渲染区/画布?

答:在2D模式下:

方法1:按住空格键,然后使用鼠标左键按住渲染区空白区域,拖动鼠标。

方法2:(win下)在渲染区任意位置按住鼠标中键,拖动鼠标。

方法3:(mac下)mac下可以使用鼠标的单指滑动。

3D模式待定义。

问:为什么一个控件添加为其他控件的子控件后会不见了?

答:当前修改控件的父子级关系,控件的位置值没有做调整,即修改前与修改后控件的坐标值不会根据显示效果重新调整。请根据修改前的控件的位置去寻找。但也要记得你的父节点的透明度

问:如何编辑动画?

答:编辑器动画功能以时间轴方式组织。编辑动画即在时间轴添加相关属性的关键帧。

方法1:首先勾选自动记录帧,然后在时间线面板中选择期望添加动画的位置,修改对应的属性。所做的修改就会被记录。

方法2:在时间线面板中右击、”添加帧”,会在对应位置插入帧,然后选择对应的帧修改相关属性。只能修改已有的帧。

方法3:在时间轴面板中选定期望插入帧的位置,然后点击”添加帧”按钮。

一般建议用方法1,现在编辑器不同属性的时间线是分开的,即一个对象的不同属性的动画是独立互不影响的。目前通过”添加帧”操作添加的帧只能添加对象已有的属性的动画,而自动记录帧则能够处理到所有的属性。

问:关键帧不能多选后操作吗?

答:目前暂不支持按ctrl键多选关键帧;支持鼠标拖拽矩形框进行多选,或按shift连续选择指定区域的关键帧。

问:csd和csb文件格式的区别是什么?

答:csd用于编辑器读取,XML格式,可读性强,可以打开这个文件看看里边写了什么,但读取效率相对较低。

csb是导出的数据,flatBuffer格式,读取效率高,但没有可读性。未来还将支持导出json、lua格式的数据。

问:导出的数据格式有什么区别?我应该选择哪种数据格式?

答:csb是flatbuffer格式的数据,解析、读取速度都非常快,一般配合C++使用。

Json格式数据适用于web平台,可读性较高,配合JavaScript使用。

未来还将支持lua格式的数据,这是由编辑器直接导出的构建界面的lua代码,读取性能较好,可定制性高,与lua项目配合使用。

【中级】

问:发布到IDE 、VS、XCODE选项灰色

答:如果创建项目时没有选择使用Cocos2d-x那么这些选项都会是灰色的;如果选择了C++语言,或没有勾选使用IDE,则IDE按钮不可用;如果选择了其他语言没有勾选生成源代码,则VS/XCODE按钮不可用。

问:预览时显示不全

答:有时因为屏幕大小的缘故会发生预览显示不全的情况,可以在预览窗口点击视图,改变显示的适配尺寸(常见手机尺寸)或者进行缩放,解决这个问题。

问:如何快速排列摆放相同的图片?

答:在编辑器菜单栏下方有一列用于对齐的按钮,多选期望对齐的控件后,即可使用这些按钮进行快速排列。

问:如何将编辑好的资源组合后(保证其相对位置不变)进行操作?

答:目前没有组合功能,可以通过设置其为同一个父控件的子控件进行统一操作;或者可以通过同时选中(拖拽矩形框或ctrl+单选),进行统一操作。

问:固定与拉伸功能(布局功能)如何使用

答:选择编辑区里的任意控件,开启任一边上的固定图钉,该控件到父节点对应边的距离就会被固定,开启任意对边的图钉,控件到对应两边的距离固定成比例。

开启任意方向拉伸条,控件对应方向的大小跟父节点对应方向的大小固定成比例。

具体可以看官方手册:自动布局

问:如何发布合图

答:在资源面板右击->”新建文件”,选择合图文件。然后将你希望放在一张合图的文件拖放到新建出来的合图文档中。

问:如何找回艺术数字控件

答:通过菜单栏的”编辑”->”偏好设置”或按”ctrl+,”快捷键打开”偏好设置”面板。

在”环境设置”->”通用”中,勾选”允许使用过时控件”,即可在对象面板的”过时控件”中找到艺术数字控件。

注:2.x版本中不建议继续使用”艺术数字”,建议使用”FNT字体”代替。艺术字体更灵活,且不限制使用的字符类型。

问:如何添加帧事件?

答:在动画面板中,勾选”自动记录帧”复选框。在时间线面板中选择需要添加”帧事件”的位置,然后在属性面板->”高级属性”->”帧特性”中,修改帧事件的值,按下回车即可。

【高级】

问:回调特性有什么作用?

答:可以直接在编辑器里边指定某个控件的事件的处理函数。不再需要一个一个去get控件啦。也不再需要因为修改了控件名或者其他属性后,就得去改程序啦。这些,都可以交给策划了。

对于回调特性的使用方法可以查看此篇教程:http://www.cocoachina.com/bbs/read.php?tid-274210.html

问:如何导入Flash?

答:不能导入flash,但可以从flash导出CS项目,然后在放到现有项目中。

具体实现方法可以看插件作者的帖子:

http://www.cocoachina.com/bbs/read.php?tid=236927

问:如何创建骨骼动画?

答:CocosStudio v2.x版本没有骨骼动画这个概念,使用现有的动画机制也能够创作比较好的动画效果。若觉得现有机制不足,也可以使用CocosStudio v1.6的动画编辑器进行编辑,然后使用骨骼控件引用到CocosStudio v 2.x中。

问:如何监听各个控件的交互事件?

答:Cocos Framework的交互事件有触摸、键盘、焦点和鼠标事件四种。

但是GUI事件一般只涉及触摸事件,且不同控件的交互事件都是由触摸事件扩展而来。

GUI控件用来监听触摸事件的函数有:

addTouchEventListener:触摸事件的完整监听函数,能监听到一次触摸的开始、移动、抬起和取消四种事件。每触发一个事件回调一次设置的监听函数

addClickEventListener:当触发抬起这个触摸事件的时候,回调一次设置的监听函数。

addEventListener:此事件依不同控件有所不同。

问:基于cocos获取界面上的某个对象进行操作?

答:Cocos Framework的界面对象之间是以树形式组织,节点之间一般是父子级关系。

节点提供了getChildByName和getChildByTag两个接口来支持通过对象的名字和逻辑标签来获取子节点。这两个接口只能获取当前节点的子节点,不能获取子节点的子节点。

另外还有getParent接口,用于获取当前对象的父节点。

问:场景、图层、节点的区别?

答:美术层面上:

场景文件可视为一个屏幕,不能被嵌套到其他文件中。是游戏中必不可少的元素,可用来创建关卡、菜单等。

节点文件是界面的最基本元素,一般用来存储控件、及制作小动画,以便在其他类型文件中复用。

图层文件通常包含直接在屏幕上呈现的内容,我们需要在图层中加入精灵、文本标签或其他游戏元素,并设置这些元素的属性,如位置、方向和大小以及设置游戏元素的动作等。

技术层面上:

Cocos Framework的界面对象以树形式组织。

节点(Node)是构成树的基本元素,所有能够被挂载到树上的对象都必须继承节点,包括场景和图层对象。

场景(Scene)对象在Framework中一般作为一个界面的入口,即树的根。

图层(Layer),节点的扩展,能够监听游戏的触摸、重力感应、键盘事件。

问:在Cocos Framework中如何加载cocos创建的界面?

答:对于csb和json文件,可以使用CSLoader对象的createNode接口,传入csb文件和json文件的路径。

对于lua格式的文件,在lua中require对应的文件,然后调用其中的create函数即可。

问:某些情况下执行CSLoader::createNode执行成功,但是将加载出来的节点添加到界面后只有文本,或这没有任何内容,请问怎么解决?

答:Cocos Framework的reader使用绝对路径来定位图片,你可能修改了导出的csb/json文件的路径,但是没有将修改后的路径添加到FileUtils的searchPath中。

问:某些情况下执行CSLoader::createNode返回空值,应该怎么解决?

答:一般是cocos frameWork与cocos studio版本不对应,请将framework升级至cocosstudio对应的版本。

若版本能够对应但依然加载失败,请检查传入createNode的文件的路径,查看加载过程中的输出数据是否有可用的异常信息。

或至官方论坛寻找更多技术支持:http://www.cocoachina.com/bbs

问:在拼接sprite的时,如果两个sprite邻接,那么当它们发生移动的时候,显卡会在邻接处渲染出一条黑边或白边,如何解决?

答:修改 ccConfig.h,将 #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 0 改为 #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1 即可。