注册 登录
主题 : 【教程】使用Cocos构建一个完整项目
级别: 精灵王
状态: 连续签到 - [1天]
UID: 387086
精华: 3
发帖: 1493
可可豆: 1897 CB
威望: 1886 点
在线时间: 1081(时)
注册时间: 2014-10-16
最后登录: 2018-07-14
0 楼:  发表于: 2015-02-05 20:29    发自: Web Page

【教程】使用Cocos构建一个完整项目   

管理提醒: 本帖被 东扬冬阳 设置为精华(2015-03-08)
使用Cocos构建一个完整项目
零、简介:
Cocos是触控科技推出的游戏开发一站式解决方案,包含了从新建立项、游戏制作、到打包上线的全套流程。开发者可以通过cocos快速生成代码、编辑资源和动画,最终输出适合于多个平台的游戏产品。
Cocos的主要产品有Cocos Studio、Cocos2d-x(Cocos Framework)、Cocos Code IDE。

Cocos2d-xCocos2d-x是基于OpenGL ES的跨平台开源引擎,现为全球占有率第一的手机游戏引擎,被媒体成为“千万级手游摇篮”。游戏开发快速、简易、功能强大。Cocos2d-x核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、WindowsPhone、黑莓(BlackBerry)及Tizen等等,省事省力省成本。
Cocos Studio是Cocos2d-x引擎配套的跨平台游戏开发工具,帮助开发者快速构建游戏场景、编辑UI、编辑动画等游戏资源,支持第三方的资源导入。支持多种类型游戏的编辑,满足不同开发者和公司的开发需求,并且上手容易,简单易懂,同时提供了丰富的技术支持和开发资源。
Cocos Code IDECocos CodeIDE 是一个基于 Eclipse 的跨平台 IDE,专门为 Cocos2d-x Lua & JavaScript 开发人员准备,通过IDE 你可以方便的创建游戏工程、编写并且支持在不同平台上调试代码、实时查看代码被改变后的效果,最终直接发布成一个可上架的安装包。
关于本文:本文期望通过一个简单的示例,演示Cocos的上述三大产品的使用方法。期望读者阅读完本文之后能够使用Cocos构建一个简单的项目。

一、安装:
首先下载并安装Cocos的安装包,下载地址:http://cn.cocos2d-x.org/download/
安装完成后,打开启动器:


启动器
Cocos启动器的界面如下:


Cocos启动器主界面
启动器是Cocos的入口,具有如下功能:
项目页面:用于项目管理,包含打开旧项目和创建新项目功能。
示例页面:这里可以打开CocosStudio的一些示例工程。
教程页面:包含Cocos的一些教程。
插件页面:Cocos的插件商店,目前正在逐步丰富。
下载页面:下载中或已经下载的插件列表。
反馈页面:对于Cocos项目的意见、建议或者BUG都可以在这里提交,有问题也可以到这里咨询。每天都有相关人员来跟进处理。
配套的Cocos Framework和Cocos Code IDE两个产品可以在Cocos插件商店中找到,本篇文章使用的Cocos系列产品的版本分别是Cocos2.1 + Cocos Framework3.4 + Cocos Code IDE 1.2.0。
二、创建项目
打开Cocos启动器,在项目页,点击“新建一个项目”弹出新建项目向导:
  
新建项目向导
支持创建空白资源项目和空白完整项目这两种项目。
空白资源项目即创建出的项目不包含Cocos Framework,只能编辑和导出资源,一般是期望美术项目和程序项目分离时使用。
空白完整项目即则含有Cocos Framework。可以在一个项目中同时完成美术和代码的编辑。PS:目前来说(cocos2.1)Framework可以认为是帮你编译好的2d-x二进制版本,未来会拆分framework来提供让你配置项目功能的能力,可以任意添加、删除任何不想要的模块。若你希望能够有2d-x的源码,可以创建空白资源项目,然后用2d-x创建的项目来加载Cocos制作的资源。
选择“空白完整项目”,点击下一步,设置项目信息:
  
设置项目信息
这里可以设置项目名称、语言类型和屏幕方向等基本信息。本篇教程的项目信息设置如上。
项目语言选择:
三种语言各有优势。Lua语言简单易学,而且灵活,运行性能也很好;JavaScript语言支持web平台,可以利用web平台优势,一次发布到所有终端;C++项目适用于对性能要求极高的游戏。同时,lua和JavaScript支持热更新,不必像C++一样,当项目发布之后,如果需要更新代码就得重新打包提交审核。
简单起见,这里使用lua语言。
三、编辑界面
项目创建完成,进入CocosStudio编辑器,编辑器的界面分布如下:
  
编辑器界面
关于这些面板,可以在这里找到相关的介绍:
http://cn.cocos2d-x.org/article/index?type=Cocos%20Studio&url=/doc/cocos-docs-master/manual/studio/v2/chapter1/interface/about/zh.md
导入资源:
导入资源的方法在手册里边也有介绍:
http://cn.cocos2d-x.org/article/index?type=Cocos%20Studio&url=/doc/cocos-docs-master/manual/studio/v2/chapter1/resources-workflow/zh.md
 这个示例项目使用的资源下载链接为(是此前的一篇教程中的资源):
 http://cn.cocos2d-x.org/uploads/20141022/1413967529391837.zip
我们将这里边的资源导入,结果如下:
  
导入的资源
我们使用默认的HelloWorld界面作为主界面。
接下来我们为主界面添加一个播放按钮,作为进入游戏界面的入口:
添加按钮
调整拖放出来的按钮及文字的大小,结果如下:
  
按钮文本和文本颜色
  
按钮尺寸
这里点击“重置尺寸”会将按钮设置为按钮的“正常状态”图片的尺寸。
另外按钮初始状态是开启九宫格的,这里我取消了九宫格。
九宫格在属性面板中,使用下面这个面板进行设置:
  
九宫格
关于九宫格,用户手册中有详细介绍:
其实大部分功能在用户手册都有详尽介绍了,因而如果我们想了解某个功能,只需要上去上述手册中搜索即可。
然后新建一个场景文件,作为游戏界面。新建文件可以通过右击资源面版,在弹出的菜单中选择“新建文件”选项,或者按“Ctrl+N”快捷键:
  
新建文件
新建文件时会弹出一个向导:
  
新建文件向导
这里可以设置文件类型,总共有场景、图层、节点和合图四种类型。
关于这几种文件的区别我们可以看看用户手册:
http://cn.cocos2d-x.org/article/index?type=Cocos%20Studio&url=/doc/cocos-docs-master/manual/studio/v2/chapter2/add-resources/new-file/zh.md
对于合图文件除了手册中介绍的价值外,还可以提高游戏运行时的渲染性能。但要注意两点:1.制作的合图不要留大量的空白区域,这会导致加载后浪费内存空间;2.尽量不要把不同场景的图片放到一起,除非不同这些图片是不同场景共用的。
我们创建一个场景文件,名称为“PlayScene”,“PlayScene”的编辑方法跟下面这篇《围住乖乖兔》的教程差不多。这篇教程写得很好,“PlayScene”的编辑大家看这篇教程就行,连接如下:
http://cn.cocos2d-x.org/tutorial/show?id=1651
不过我们需要对上边这篇教程编辑的界面做两个调整:
1. 原文中使用精灵控件来放置石头,但这里精灵被我替换成图片控件,原因后边说明。
2. 为了能够方便地在程序中获取到某个石头对应的图片控件,这里对各个石头按如下方式进行命名:


石头命名规则
关于为何使用图片控件而不用精灵控件的原因:在cocos framework中图片控件继承自Widget类型,一般这种类型的对象被称为控件。控件自带了一些方便监听交互事件的接口,其中图片能够监听触摸事件,这里为了方便监听石头的点击消息使用了图片控件来显示石头。
关于GUI控件能够监听的更多事件类型可以查看此篇文章:
http://www.cocoachina.com/bbs/read.php?tid=270804&page=1&toread=1#tpc
在游戏结束时,给个战绩面板,告知玩家这一局的结果:
新建一个文件,选图层类型,名称为layer大小300*300:


新建图层文件
使用精灵控件和文本控件、FNT字体控件,组织一个这样的界面:


结算界面
然后将这个界面嵌套到刚新建的PlayScene中,命名为“settlement”。嵌套的操作方法:打开期望接受嵌套对象的csd文件(先称为A)然后将资源面版的csd文件拖放到A的渲染区即可。
然后我们为这个面板编辑一个弹出动画:
添加动画主要利用时间轴面板进行。添加动画的方式有两种:1是用“添加帧”操作,2是使用自动记录帧功能。
一般使用自动记录帧来操作,因为现在动画的各个属性的时间轴是分开的,如下:


展开的动画属性列表
如果使用添加帧操作,则只能添加已有属性的帧,而使用自动记录帧则没有这个限制。
OK,首先打开自动记录帧,选择settlement对象,点击settlement所在时间轴的第一帧,在属性面板修改透明度为0,再选择时间轴的第30帧将透明度设置为百分之百,最终得到如下结果:


编辑动画
点控件树面板上方的播放按钮即可预览到效果。
四、发布
编辑好界面后就可以发布资源了,发布是指将我们编辑好的界面转换成CocosFramework能够解析的数据。
发布之前我们可以在“项目设置”中对发布进行一些配置:点开菜单栏的“编辑”-“项目设置”,打开项目设置:


打开项目设置
在发布设置界面如下,这里可以配置发布内容、路径和数据格式。
  
发布设置
发布内容指发布数据时导出哪些内容,若选择发布资源与项目文件,则导出所有csb文件和使用到的资源。若选择仅发布项目文件,则仅导出csb文件。
数据格式:各数据格式如的优点如图中所述。这里我们选择csb格式。
发布有三个不同的发布方法:“发布资源”、“发布到Cocos Code IDE”和“发布到Visual Studio/XCODE”。对于“发布到XXX”的选项我们可以理解为发布并同时打开对应的IDE工具。
  


发布的资源
发布之后,就可以把发布出来的资源交给程序加载出来,添加游戏逻辑啦。
五、代码
这里使用CocosCode IDE来进行代码部分的编辑。
Cocos Code IDE作为Cocos系列产品之一,主要提供了对cocos2d-js和cocos2d-lua两大脚本引擎的代码编写、调试、打包功能。
代码编辑:主要基于eclipse上扩展了代码提示方面的功能,包括API、框架甚至用户自己写的接口,都能有详细的提示。
调试:提供完整的断点调试功能及远程调试能力。其远程调试功能十分强大,能够在PC上调试IOS、Android平台上运行的项目,配合VS/XCODE还能够同时调试同一项目的C++代码和脚本代码。
打包:使用IDE仅需要几步配置就可以完成打包到手机平台上的安装包。
Cocos Code IDE界面:
Cocos Code IDE的界面如下所示:


Cocos Code IDE
工程视图:包含此前创建的Cocos完整项目,比如我们刚创建的Rabbit项目。
编辑区:不用多说,就是编辑代码的地方。
大纲:当前文件中的对象、函数索引。
控制台:用于输出各种信息,编译错误、运行错误还有你自己调用print、log函数时的输出都会显示在这里,这些信息对调试代码是十分重要的。很多时候我们都可以在这里直接看出程序哪里出错了,然后提出可能的应对方案。

关于创建的lua项目:
Cocos2d-lua目前已经被quick团队接管,目前新建的lua项目都会带上一个quick的框架,如果你想学习这个框架可以参考下面这个链接:
http://cn.cocos2d-x.org/tutorial/show?id=2150
这个是quick团队的廖大神主讲的《两小时学会用Cocos2d-lua开发游戏》视频教程。主要介绍使用cocos2d-lua快速开发一个捏虫子的小游戏。里边有介绍quick的MVC框架,这篇教程将会使用到这个框架。

从main.lua开始:
Main.lua是Cocos2d-lua项目的默认入口,即项目启动时,首先执行这个文件。(我们也可以修改config.json文件的entry字段来配置入口文件)
main.lua中进行了几项操作:
a) 把res和src两个文件夹添加到文件搜索路径。
b) 读取Config.lua加载lua配置信息。执行Cocos.init,这个文件根据配置信息初始化Cocos2d-lua框架(require加载lua模块时必须使用”.”来代替路径中的”/”符号)
c) 创建App文件夹中的App对象,调用run函数,run函数可以有参数,用于配置第一个进入的场景,默认是MainScene。从App对象开始才是是码农朋友们的劳动场所,一般从这里开始添加游戏逻辑。
Config.luaConfig.lua提供了几个字段用于配置项目,可以修改这些字段的值来达到某些效果:
DEBUG字段:设置输出调试信息的等级,0为无,1为少量的,2为完全的。其实就是控制几个不同的print函数是否输出。
CC_USE_FRAMEWORK字段:设置是否使用quick框架,包括MVC框架。
CC_SHOW_FPS字段:是否显示FPS等显卡相关信息。
CC_DISABLE_GLOBAL字段:是否允许定义全局变量,具体可看此篇说明:
http://cocoslua.cn/2014/12/disable-global-var/
CC_DESIGN_RESOLUTION字段:设置在不同分辨率下,游戏分辨率的调整策略,具体可参考此篇教程:http://cn.cocos2d-x.org/tutorial/show?id=1434
在执行cocos/init.lua的时候,就会根据上述配置信息,来配置项目。
Cocos-Lua项目自带的MVC框架
自带的MVC框架的基础代码在创建的项目的src/package/mvc中可以找到。这里边有三个文件AppBase.lua、init.lua、ViewBase.lua。
AppBase:算是MVC框架的管理角色,主要管理View对象,比如提供了一些接口用于切换View。
ViewBase.lua:继承于2d-x的Node类型。但其中的ShowWIthScene接口会创建一个Scene文件,把View自身添加到这个Scene上,并命令全局显示这个Scene。
Init.lua:不用说,看字面就知道,这个用于初始化MVC框架。

基于MVC框架开始给我们的游戏添加逻辑:
MVC框架填充逻辑的地方默认在app文件夹中(res/app或者src/app)。
默认会在这个文件夹下生成MyApp.lua和Views文件夹,我们应该在views中为每个游戏场景添加一个继承自ViewBase的类,加载CocosStudio编辑出来的界面,处理交互、动画等界面逻辑,并调用models中的类处理游戏逻辑;此外我们还需要在这个文件夹下添加一个model文件夹,用来填写游戏的逻辑代码。


MVC具体游戏逻辑的文件结构
在MyApp.lua中,我们可以重写onCreate函数,在这里添加进入第一个游戏界面之前的处理逻辑,我们的示例游戏比较简单,不需要在这里做什么特殊处理。在onCreate执行完之后,紧接着会执行AppBase的run函数,这个函数在Main.lua中调用,这个函数有一个参数,用来决定进入的第一个View,如果不填写这个参数,默认会进入MainScene.lua文件。

主界面:
MainScene.lua的代码如下:
--MainScene.lua
--创建一个MainScne类,继承ViewBase对象
local MainScene = class("MainScene",cc.load("mvc").ViewBase)
--重载onCreate函数
function MainScene:onCreate()
--加载CocosStudio编辑出来的MainScene.csb
local root = cc.CSLoader:createNode("MainScene.csb")
root:addTo(self)
local function onPlay()
--进入PlayScene,使用闭包catch self变量。
self:getApp():enterScene("PlayScene")
end
--获取名称为PlayButton的按钮,然后添加这个按钮在接受到点击时的处理代码
root:getChildByName("PlayButton")
       :addClickEventListener(onPlay)
end
return MainScene
大部分逻辑上述代码中的注释都有写明。
然后点击Code IDE工具栏的运行按钮:  

接着就可以看到我们的MainScene界面啦:
  
主界面
游戏界面:
点击Play按钮,会触发上述代码中的onPlay函数。然后执行下面这句代码:
self:getApp():enterScene("PlayScene")
如上:先通过ViewBase的getApp接口获取App对象,然后执行app的enterScene接口,这个接口会根据参数去app/views文件夹下找PlayScene.lua这个文件并加载出来。当然这个文件里边的类必须继承自ViewBase,不继承ViewBase就不能用enterScene加载。
PlayScene.lua的部分代码如下:
1.逻辑代码的加载:
local GameLogital = import("..models.GameLogital")
MVC框架没有帮我们自动加载app/models里边的lua代码,需要我们自己去手动加载这些东西。
注:这里使用到import接口而不是require,import是quick框架提供的接口,相比require这个接口使用的是相对路径。
2.方便的接口:
self.root = cc.CSLoader:createNode("PlayScene.csb"):addTo(self)
注意最后的addTo函数,这些函数是quick提供的,在调用完会返回对象本身,所以我们可以像下面这样使用,不需要重复地去写变量名:
cc.Sprite:create(texture):move(x,y):rotate(r):addTo(p)
这些函数可以在src/cocos/framework/extends/下找到。
3.创建,添加动画:
local tlAct = cc.CSLoader:createTimeline("PlayScene.csb")
self.root:runAction(tlAct)
self.act_tag = tlAct:getTag()--用于后续获取动画
首先使用cc.CSLoader:createTimeline创建动画,然后使用runAction把这个动画挂载到加载出来的节点上。
4.播放动画:
local tlAct =self.root:getActionByTag(self.act_tag)
tlAct:gotoFrameAndPlay(0,false)
先通过tag获取动画,如上。然后调用gotoFrameAndPlay接口,这个接口有三个重载:
gotoFrameAndPlay(begin,end,loop)
gotoFrameAndPlay(begin,loop)
gotoFrameAndPlay(begin)
参数解释:
Begin:从第几帧开始播放
End:播放到第几帧
Loop:是否循环


游戏界面
如何知道这些接口?
可以在论坛找cocos2d-x的api文档,一般在这个帖子更新(记得点个赞支持下作者哦):
不过对于新手,可能直接看例子会更有效率些。我们可以去官方下载一个cocos2d-x的引擎源码。在下载下来的源码里边找到一个build文件夹,里边有一些解决方案工程文件,用相关的IDE工具编译,调试运行里边的test工程。可以从这里看到cocos2d-x几乎所有功能的演示,这些演示的代码在源码里边的test文件夹可以找到。记得不要抄里边的代码,搞懂每一句代码的意思会让你成长得更快的。


test工程列表
这篇教程所创建的工程可以在这里下载:




本部分内容设定了隐藏,需要回复后才能看到


[ 此帖被东扬冬阳在2015-03-08 23:24重新编辑 ]

级别: 新手上路
状态: 连续签到 - [1天]
UID: 334909
精华: 0
发帖: 11
可可豆: 18 CB
威望: 15 点
在线时间: 61(时)
注册时间: 2014-06-28
最后登录: 2015-11-25
1 楼:  发表于: 2015-02-05 22:07    发自: Web Page
非常好的教程,正好开始学习用cocos
级别: 新手上路
UID: 437445
精华: 0
发帖: 1
可可豆: 1 CB
威望: 1 点
在线时间: 9(时)
注册时间: 2015-02-03
最后登录: 2015-04-01
2 楼:  发表于: 2015-02-06 00:04    发自: Web Page
非常詳細的教學!
级别: 侠客
UID: 277785
精华: 0
发帖: 110
可可豆: 202 CB
威望: 203 点
在线时间: 486(时)
注册时间: 2013-11-25
最后登录: 2018-07-11
3 楼:  发表于: 2015-02-06 09:46    发自: Web Page
出个 C++  完整教程吧      ( 游戏 追求的 就是 极致的  展现和速度)


什么几吧  脚本   LUA   和   卡的要是的IDE
都在 搞毛啊  

忠告下    你们的 IDE  和  LUA   肯定要死的      还是   把 C++的 这套方案  弄好  才有未来  
不要分散精力了    未来  cocos2dx 4.0  还要 3D呢  那必须 性能 最佳的解决方案
级别: 新手上路
UID: 379719
精华: 0
发帖: 21
可可豆: 57 CB
威望: 58 点
在线时间: 37(时)
注册时间: 2014-09-26
最后登录: 2015-03-28
4 楼:  发表于: 2015-02-06 10:06    发自: Web Page
总算出了个详细的教程,支持一下
级别: 精灵王
状态: 连续签到 - [1天]
UID: 387086
精华: 3
发帖: 1493
可可豆: 1897 CB
威望: 1886 点
在线时间: 1081(时)
注册时间: 2014-10-16
最后登录: 2018-07-14
5 楼:  发表于: 2015-02-06 10:24    发自: Web Page
回 3楼(wolfjackfox) 的帖子
你再试试IDE120 瞧瞧还卡不
级别: 新手上路
状态: 连续签到 - [1天]
UID: 310128
精华: 0
发帖: 3
可可豆: 6 CB
威望: 5 点
在线时间: 16(时)
注册时间: 2014-04-22
最后登录: 2015-03-17
6 楼:  发表于: 2015-02-06 10:35    发自: Web Page
回 楼主(东扬冬阳) 的帖子
  
O(∩_∩)O哈哈~很好很强大
级别: 骑士

UID: 49342
精华: 0
发帖: 198
可可豆: 1062 CB
威望: 1062 点
在线时间: 286(时)
注册时间: 2011-02-01
最后登录: 2016-02-10
7 楼:  发表于: 2015-02-06 14:52    发自: Web Page
mark下来先。不过还不是完整例子。只是界面部分。
级别: 新手上路
UID: 407450
精华: 0
发帖: 40
可可豆: 103 CB
威望: 103 点
在线时间: 78(时)
注册时间: 2014-11-27
最后登录: 2015-06-05
8 楼:  发表于: 2015-02-06 22:59    发自: Web Page

新手
目前用的VS2010+3.3版本的做了几个DEMO
看到了cocos更新正式编辑器,听说可以同时搞定素材+程序编辑最后打包
然后下载好看到这个教程.

结果:商店下载的不是3.4final的rc1的
编辑好素材,之后完全搞不懂上面写的是什么东西.
最后发布到vs,左侧的解决方案只有一个项目解决方案,和用3.3或者3.4 New出来的不同.
之后是不知道如何绑定这些素材

教程评价:乱七八糟完全搞不懂啊.
级别: 精灵王
状态: 连续签到 - [1天]
UID: 387086
精华: 3
发帖: 1493
可可豆: 1897 CB
威望: 1886 点
在线时间: 1081(时)
注册时间: 2014-10-16
最后登录: 2018-07-14
9 楼:  发表于: 2015-02-07 12:56    发自: Web Page
回 8楼(woocnomo) 的帖子

哪里写的不好、或者哪个步骤不懂,你提呗,我补充。
[ 此帖被东扬冬阳在2015-02-07 13:17重新编辑 ]

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部