码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-09-03 21:41:17      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

读取游戏数据档是游戏并不可少的一个功能,一般我们搭建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;
}

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

标签:

原文地址:http://www.cnblogs.com/plateFace/p/4780746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!