cocos2d-x初学者FAQ教学
今天带大家了解一下 Cocos2d-x 初学者常见问题(FAQ)方面的知识。
初级问题
问:Cocos 是什么,可以做什么,从哪里下载?
Cocos 是由触控科技推出的游戏开发一站式解决方案,涵盖了从新项目立项、游戏制作到打包上线的全套流程。开发者借助 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 下):使用鼠标的单指滑动。
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 字体”代替,艺术字体更灵活,且不限制使用的字符类型。
问:如何添加帧事件?
在动画面板中,勾选“自动记录帧”复选框。在时间线面板中选择需要添加“帧事件”的位置,然后在属性面板->“高级属性”->“帧特性”中,修改帧事件的值,按下回车即可。
高级问题
问:回调特性有什么作用?
可以直接在编辑器里边指定某个控件的事件的处理函数,无需一个一个去获取控件,也无需在修改了控件名或者其他属性后去修改程序,这些都可以交给策划人员处理。
问:如何导入 Flash?
不能直接导入 flash,但可以从 flash 导出 CS 项目,然后将其放到现有项目中。
问:如何创建骨骼动画?
CocosStudio v2.x 版本没有骨骼动画这个概念,使用现有的动画机制也能够创作比较好的动画效果。若觉得现有机制不足,也可以使用 CocosStudio v1.6 的动画编辑器进行编辑,然后使用骨骼控件引用到 CocosStudio v 2.x 中。
问:如何监听各个控件的交互事件?
CocosFramework 的交互事件有触摸、键盘、焦点和鼠标事件四种,但 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 的文件的路径,查看加载过程中的输出数据是否有可用的异常信息。