1.关于cocos creator项目结构
这里以官方的“范例集合”演示demo为分析对象。
先到cocos creator 教程的演示和范例项目页面,如下
http://docs.cocos.com/creator/manual/zh/
直接点击其上页面中的“范例集合”会跳转到Git,如下
https://github.com/cocos-creator/example-cases
其项目结构如下:
assets
--cases //所有范例
--01_graphics
--01_sprite
--02_particle
--03_texture_format
--02_ui
--01_widget
--02_label
--03_button
--04_progressbar
--05_scrollView
--06_layout
--07_change_canvas_anchor
--08_editBox
--09_videoplayer
--10_webview
--11_richtext
--12_slider
--13_toggle
--14_pageView
--15_mask
--03_gameplay
--01_player_control
--02_actions
--03_animation
--04_audio
--05_scripting
--01_properties
--02_prefab
--03_events
--04_scheduler
--05_cross_reference
--06_life_cycle
--07_asset_loading
--08_module
--09_singleton
--10_loadingBar
--11_network
--12_pool
--camera
--collider
--Category
--Hittest
--Platform
--Shape
--Shooter
--Tag
--Utils
--dragonbones
--graphics
--motionStreak
--native_call
--spine
--tiledmap
--i18n //本地化(中英文)、一些提示说明
--res //通常我们使用的所有资源就放在这个文件夹下
--animation //动画
--atlas //图集(可以使用TexturePackerGUI将小图片打成大图)
--dragonbones//骨骼动画
--imported //导入文件
--prefabs //预制文件
--textures //图片
--resources //这里放的是要在脚本中动态加载的资源,
//比如需要手写代码创建一个Sprite时,其图片
//必须放在这个文件夹下。想查看此文件夹的详
//细描述,你可以在你的项目下创建这个文件夹,
//在编辑器属性面板会有这个文件夹的说明。
--audio //音频文件(当不需要动态加载时,要放在res下)
--font //字体文件(当不需要动态加载时,要放在res下)
--tilemap //2d瓦片
--... //以下省略
--scripts //按道理说,所有脚本应该放在这里,但实际上,
//这个文件夹下只放了全局脚本,原因就是这个
//工程文件中的示例太多了,于是,创建者从新
//创建了一个case文件夹放对应demo的脚本
以上至少50个demo,就是你学习写cocos creator的最佳教程,甚至
可以直接用在你的项目里。
以下是我使用的项目结构:
assets
--res
--animation
--audio
--prefab
--texture
--resources
--scene
--game.fire //游戏界面场景文件
--logo.fire //logo界面场景文件
--start.fire //开始界面场景文件
--script //我的所有脚本都放在这里
注意:最好一个界面对应一个场景文件,比如,logo界面就对应
logo.fire,这样打开它,只需要修改logo界面相关的东西。
不同场景之间切换,可使用如下代码:
cc.director.loadScene("start"); //切换到开始界面
这样的好处是,你可以在切换场景之前给当前界面添加一个
过渡动画,如下:
var fade = cc.fadeOut(1.0);
var callback = cc.callFunc(this.goToStart, this);
this.node.runAction(cc.sequence(fade, callback));
其中this.goToStart中添加的就是前面切换场景的代码。
2.场景切换问题
2.1.预加载
若在游戏界面,想快点切到开始界面,可以在游戏界面的onLoad函数中预加载开始界面
Game.js------------
onLoad: function() {
cc.director.preloadScene("start");
},
另外,可以在编辑器中选中对应场景文件,在右侧的属性检查器中勾选“延迟加载资源”。
一些预制文件、特效、动画就会在使用时才加载。进一步提高切场景的速度。
2.2.界面合一
若场景切换出现明显的闪黑,这一般会出现在使用的是亮色调背景时,若游戏比较小,
可以考虑将界面合在一起。一个节点一个界面,如下
--scene
--all.fire //界面场景文件
all场景结构
Canvas //All.js要挂接在这里,其负责不同界面节点的显示
--logo //logo界面节点,Logo.js
--start //开始界面节点,Start.js
--game //游戏界面节点,Game.js
注意:这种情况下,因为没有了切场景,故界面节点显示时,对应脚本中的onLoad只会
执行一次,每次需要通过onEnable函数重新初始化,且要用一个变量保存是否是首次
显示界面,以防止第1次的onLoad和onEnable重复初始化。
另外,使用这种合一的模式,可以实现一些切场景达不到的动画效果,比如,在开始
界面点击开始按钮进入游戏界面时,可以左移开始界面和游戏界面,达到水平滚动的
效果。
3.3.按数字键切场景
以下是官方的demo-responsive-ui-master示例代码片段。
onLoad: function () {
var self = this;
this.canLoad = true;
cc.game.addPersistRootNode(this.node); //设置当前节点为常驻节点
this.sceneList = cc.game._sceneInfos; //获得项目里的所有场景
cc.log(this.sceneList);
cc.director.loadScene('01_align_basic');
//按键监听
var listener = {
event: cc.EventListener.KEYBOARD,
onKeyPressed: function (keyCode, event) { //按下按钮1-6切换场景
cc.log('keyDown: ' + keyCode);
var idx = keyCode - 48; //若你的键盘上的数字键keyCode是从96开始的,请替换为keyCode - 96
if (idx >= 0 && idx < self.sceneList.length && self.canLoad) {
self.loadScene(self.sceneList[idx].url); //场景名字
}
}
}
cc.eventManager.addListener(listener, this.node);
},
loadScene: function(name) {
this.canLoad = false;
cc.director.loadScene(name, this.onLoadSceneFinish.bind(this));
},
onLoadSceneFinish: function() { //场景加载完的回调函数
this.canLoad = true;
}