项目实战(读档的错误捕捉)

读取游戏数据档是游戏并不可少的一个功能,一般我们搭建Unity环境的时候, 我们会准备一些类来负责数据的读取操作.  我来介绍下我们公司读档遇到的问题.

首先是类的介绍

  • BaseData 读档的父类
  • BaseDataManager  读档管理类(BaseDataSecondLoad方法中读取每一个档)
  • xxxx:BaseData 每一个档对应的操作类
    • Load(string filePath) 方法里面具体怎么读每一个档

 

=。=来看下我们读档操作是怎么写的.貌似看起来没有问题. 如果环境是这样的Android+档是在AssetBundle文件里面. 很可能因为策划和程序员的操作当值档出一定问题, 假设中途有一个档出错之后就不在会读取后面的文档, 程序员也没有log可以判断到底是哪里出错了

public IEnumerator BaseDataSecondLoad()
 {
           //读取每一个档
            m_PassiveSkill.Load(ResourceProvider.gameDataPath + "PassiveSkill");
            yield return null;

            m_BasePointExploreEvent.Load(ResourceProvider.gameDataPath + "BasePointExploreEvent");
            m_BasePointExploreBoss.Load(ResourceProvider.gameDataPath + "BasePointExploreBoss");
            yield return null;

            //读取在线奖励档
            m_OnlinePrize.Load(ResourceProvider.gameDataPath + "OnlinePrize");
            yield return null;

            m_InvitationCodePrizeData.Load(ResourceProvider.gameDataPath + "InvitationCodePrize");
            yield return null;
 }

我接下来就想到把代码改成这样

public IEnumerator BaseDataSecondLoad()
 {
    try
    {
        //读取每一个档
        m_PassiveSkill.Load(ResourceProvider.gameDataPath + "PassiveSkill");
        yield return null;
    }catch(Exception e)
    {
        //我调试的时候就能马上知道那个表出错了
        Debug.Log("PassiveSkill 读取错误");
    }
    yield return null;

    try
    {
        //读取每一个档
        m_PassiveSkill.Load(ResourceProvider.gameDataPath + "PassiveSkill");
        yield return null;
    }catch(Exception e)
    {
        Debug.Log("PassiveSkill 读取错误");
    }
    yield return null;

    //xxxx省略
}

后来发现游戏档至少有100个, 那么我try-catch要写100多遍.  我想到了模板设计模式来利用父类简化try-catch的冗余.

BaseData定义读取档的流程

public class BaseData
{
    public string table;

    public void LoadData(string filePath)
    {
        try{
            LoadDataOption();
        }catch(Exception e)
        {
            Debug.Log(table + "表读取错误了,请检查");
        }

    }

    protected abstract void LoadDataOption();
}

每一个档实现读取自己档的方法

//技能表
public class SkillBaseData:BaseData
{
    protected void LoadDataOption(){
        //如何读取每一个档
    }
}

BaseDataManager 类BaseDataSecondLoad()方法就不用写try-catch 100多遍啦

public IEnumerator BaseDataSecondLoad()
{
    SkillBaseData n = new SkillBaseData();
    SkillBaseData.LoadData("路径");
    yield return null;
}
时间: 2024-11-14 03:37:58

项目实战(读档的错误捕捉)的相关文章

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,有点小懵,,,啥都没做就给我看这个: 图一   错误提示框 后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有: 方法(1)-重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版: 方法(2)-可以先声明一个临时的C

iOS开发——使用技术OC篇&项目实战总结之开发技巧

项目实战总结之开发技巧 本文收集了25个关于可以提升程序性能的提示和技巧 1.使用ARC进行内存管理 2.在适当的情况下使用reuseIdentifier 3.尽可能将View设置为不透明(Opaque) 4.避免臃肿的XIBs 5.不要阻塞主线程 6.让图片的大小跟UIImageView一样 7.选择正确的集合 8.使用GZIP压缩 9.重用和延迟加载View 10.缓存.缓存.缓存 11.考虑绘制 12.处理内存警告 13.重用花销很大的对象 14.使用Sprite Sheets 15.避免

【WEB API项目实战干货系列】- 导航篇(十足干货分享)

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的逻辑呢? [WEB API项目实战干货系列]

项目实战,LANMP+NGINX+SQUID

项目用到的服务: LAMP+nginx+squid+代理MYSQL+rsync 搭建LAMP平台,是目前非常流行的Web开发平台,成本低廉,扩展能力好,灵活,安全性高, 深受企业和管理人员的喜爱,容易形成整体的系统结构     nginx实现了整体网络的负载均衡,还以搭建存放一些静态网页,提高客户端对静态网页的访问请求时间     最后通过squid做整个网络的代理人,提高网站的访问都提高速度(缓冲服务),并且提高网络的安全性     myslq主主结构为整体网络数据作实时备份,然后通过mysl

mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)

Web绘图--mxGraph项目实战(精华篇) 声明     本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次,每个动作另附有一个数据集,这样有向图加数据集就构成了用户交互图.为此,自己想到了mxGraph,遂决定学习之. 起步 此次项目实战是受阅读参考文献[1]启发,并在其图形布局实例基础上进行.其原始界面如图1所示,自己要实现的界面布局与之颇有几分神似.

【java】itoo项目实战之优化后具体代码

在我的前一篇博客中<<itoo项目实战之减少IO读写的导入思路>>,我介绍了如何完成减少IO读写的Excel导入,在这里我就把具体的代码实现分享给大家: 我就按照这张图的顺序给大家分享. 检查Excel 数据是否重复的代码: <span style="font-family:Times New Roman;font-size:18px;">// 2.从指定列中寻找重复行 for (int i = 1; i < realRows - 1; i++

【C/C++学院】(28)项目实战HttpServer--源码

项目实战HttpServer--源码下载地址 myhttp脚本文件 #!/bin/sh WHOAMI=`whoami` PID=`ps -u $WHOAMI | grep myhttpd | awk '{print $1}'` if (test "$#" = 0) then echo "Usage: $0 [stop] [start] [status]" exit 0 fi if (test "$1" = "start") t

项目实战——企业级Zabbix监控实战(一)

项目实战--企业级Zabbix监控实战 实验一:Zabbix监控的搭建 1.实验准备 centos系统服务器3台. 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源. 防火墙关闭. 各节点时钟服务同步. 各节点之间可以通过主机名互相通信. 1)所有机器关闭防火墙和selinux iptables -F && setenforing 2)根据架构图,实验基本设置如下: 2.Zabbix的安装 1)更新我们的yum仓库 我们去官网下载一个包zabbix-release-3.4-2.

项目实战12.2—企业级监控工具应用实战-zabbix操作进阶

无监控,不运维.好了,废话不多说,下面都是干货. 流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html 一.User parameters 用户参数 1.介绍和用法 ① 介绍 自定义用户参数,也就是自定义key 有时,你可能想要运行一个代理检查,而不是Zabbix的预定义 你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中 ② 用法格