从零开始学社交游戏开发(五)

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);            }        }


  从上面这段代码中可以看出,我们已经语言配置保存在了LanguageCn类中,这里简单介绍一下LanguageCn中的,首先看看他的接口定义:



    public interface ILanguageCn {        function setLanguages(strs_:Array):void;        function getStr(id_:int):String;}




  从接口中可以看出我们只要使用getStr方法来获取指定ID的文字串。这个ID就是对应配置中的ID,如下图:


  

  



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;        }


今天先到这里,可爱的小猪在往前跑,插件也装载了…,呵呵呵!给个效果图纪念一下:

代码下载:点这里下载



从零开始学社交游戏开发(一)

从零开始学社交游戏开发(二)

从零开始学社交游戏开发(三)

从零开始学社交游戏开发(四)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值