LOGO窗口显示出来,我们接下来需要加载游戏里需要的一些数据(配置、美术资源、音乐音效等等……)
我们前面已经计算好了整个游戏启动完成需要的步骤,分为下面几个:
1、配置数据
2、美术资源
3、游戏模块
4、场景渲染
5、进入场景
配置数据:
※语言配置 language.json
所有游戏中出现的文字都放在这个配置中,这样要支持多语言就只要改这个文件就可以了。
下面这几个配置来以后用到的时候再深入讲解:
※道具配置 props.json
游戏中道具属性配置。
※建筑配置 unit.json
游戏中所有建筑的属性配置。
※分享配置 feed_cfg.json
在朋友网中分享的相关配置。
※向导配置guid_info.json
新手教程相关配置。
※在线奖励配置 online_gift_cfg.json
玩家在线奖励相关配置。
※任务奖励配置 target_gift_cfg.json
任务完成奖励相关配置。
美术资源:
美术资源分为两个部分:
1、 基础资源
基础资源在游戏启动的时候就都加载好了。
2、建筑动画资源
这些资源往往数据量比较大,所以在需要的时候才加载。程序里按事先规定好个规则去寻找资源(以后会详细讲解)
游戏模块:
将模块VillageGodModule编译后,在plugin目录下就会产生一个VillageGodModule.swf文件,在系统配置文件的plugin中对其进行配置,如下图:
下面开始写代码,从加载配置开始处理:
1、加载配置
private function load_cfgs():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, loadCfgsComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); var url:String = cfg.sysCfg.config[cfg_load_index].url + "?" + "v=" + JFAppConfig._version; loader.load(new URLRequest(url)); }
在load_cfgs方法中URL参数总带了一个版本号(v = JFAppConfig._version),这样做主要是为了防止数据被缓冲,在版本号改变后,可以确保配置文件重新从服务器上下载。
这本版本号的在系统配置文件中有定义,如下图:
注:我们暂时就处理一下language,其他的以后再考虑。
配置加载完成后,需要将数据保存起来,代码如下:
private function loadCfgsComplete(event:Event):void { cur_load_step += 1; switch (cfg.sysCfg.config[cfg_load_index].name) { case LANGUAGE_CFG_NAME: { LanguageCn.getInstance().setLanguages(JSON.decode(URLLoader(event.target).data)); break; } default: { JFLog.outError("cfg data is not proc: name:" + cfg.sysCfg.config[cfg_load_index].name); break; } } cfg_load_index += 1; // 装载配置完成,开始装载资源 if (cfg_load_index == cfg.sysCfg.config.length) { } // 还有其他配置需要加载,继续加载下一个配置 else { load_cfgs(); logoDlg.setProgress(LanguageCn.getInstance().getStr(10000), cur_load_step / total_load_step); } }
public interface ILanguageCn { function setLanguages(strs_:Array):void; function getStr(id_:int):String;}
2、 加载美术资源:
在所有配置结束的地方加入美术资源加载代码:
for (var i:int = 0; i < cfg.sysCfg.res.length; i++) { JFDynamicResManager.getInstance().register(cfg.sysCfg.res[i].id, cfg.sysCfg.res[i].url, cfg.sysCfg.res[i].size);}JFDynamicResManager.getInstance().loadRes(OnResLoadComplete);private function OnResLoadComplete(cur_:int, total_:int):void {cur_load_step += 1; if (cur_ == total_ - 1) { // 资源加载完成 } else { // 继续下一个加载 logoDlg.setProgress(LanguageCn.getInstance().getStr(10001), cur_load_step / total_load_step); }}
3、加载游戏模块
在OnResLoadComplete方法中加入下面游戏模块的代码:
// 获取村神模块相关配置var vgModuleCfg:Object = config.cfg.getPluginById(config.cfg.VG_MODULE_ID);// 开始装载模块PluginManager.getInstance().loadModule(cfg.VG_MODULE_ID, vgModuleCfg.url, vgModuleCfg.size, loadVGModuleComplete);
config.cfg.VG_MODULE_ID 是一个常量,值和配置里的一样,如下图:
接下来需要修改一下VillageGodModule模块:
※添加接口IVillageGodModule代码如下:
package { public interface IVillageGodModule { function OnProc(Msg_:int, WParam:Object = null, LParam:Object = null):Object; }}
效果图:
※IVillageGodModule接口实现:
VillageGodModule是从PluginBasic派生出来的一个类,PluginBasic其实很简单,里面就一个OnProc方法,这个方法用来处理来自外部发送来的一些消息。
public class VillageGodModule extends PluginBasic implements IVillageGodModule { public static var theModule:IVillageGodModule; public function VillageGodModule() { var id:int; if (theModule != null) { JFLog.outError("module is init!"); return; } else { id = cfg.VG_MODULE_ID; } super(id); theModule = this; } }
4、开始初始化场景
※向插件发送初始化场景消息:
_VillageGodPlugin.OnProc(TVGDefine.INIT_SCENE, initSceneComplete);
※插件里处理初始化场景消息:
override public function OnProc(Msg_:int, WParam:Object = null, LParam:Object = null):Object { switch (Msg_) { case TVGDefine.INIT_SCENE: { FInitSceneCompleteNotify = WParam as Function; // 初始化场景 onInitScene(); break; } } return null; }
5、进入场景
※向插件发送进入场景消息:
_VillageGodPlugin.OnProc(TVGDefine.INTO_SCENE, sceneEnterComplete);
※插件里处理进入场景消息:
override public function OnProc(Msg_:int, WParam:Object = null, LParam:Object = null):Object { switch (Msg_) { case TVGDefine.INTO_SCENE: { FIntoCompleteNotify = WParam as Function; // 进入游戏场景 onIntoScene(); break; } } return null; }
今天先到这里,可爱的小猪在往前跑,插件也装载了…,呵呵呵!给个效果图纪念一下:
代码下载:点这里下载