Download presentation
Presentation is loading. Please wait.
1
基于二维表的游戏模型 HIC工具链在游戏中的应用
2
把CSV导入Haxe,然后…… 编译成C#、Java、Flash、HTML5、C++、PHP、Python…… 基本功能
3
原始Excel表
4
生成C# // 每行生成一个静态字段 // 每个工作表生成一个类 public class Quest {
public static readonly BasicQuest Bq1; public static readonly BasicQuest Bq2; public static readonly BasicQuest Bq3; public static readonly BasicQuest Bq4; public static readonly BasicQuest Bq5; public static readonly BasicQuest Bq6; public static readonly DailyQuest Dq5001; public static readonly DailyQuest Dq5003; public static readonly QuestType ZhuXian; public static readonly QuestType ZhiXian; public static readonly QuestType RiChang; } public class BasicQuest { public QuestType Type { get; } public string Name { get; } public bool Deletable { get; } public int BestLevel { get; } public string Description { get; } public BasicQuest Precondition { get; } public int MaxLevel { get; } public int MinLevel { get; } } public class DailyQuest ... public class QuestType
5
日常开发流程 游戏设计师 游戏工程师 修改xlsx文件 保存xlsx文件 (插件自动导出csv文件) 运行构建脚本 sbt compile
重启或热更新游戏服务器 重启游戏客户端 测试 提交xlsx和csv文件 svn commit 更新二维表 svn update 运行构建脚本 sbt compile 直接用C#/Scala调用二维表的数据模型 myTextArea.Text = public Quest.Bq1.Description; 调试
6
基本用法差异 HIC 大剑配置表 有布尔类型 允许空行和注释 使用字母ID 静态类型 无布尔类型 禁止空行和注释 使用数字ID 动态类型
用y/n表示 允许空行和注释 // 这是注释 使用字母ID Bq1, Dq5001, ... 静态类型 由HIC编译期工具检查类型 无布尔类型 用0/1模拟 禁止空行和注释 使用数字ID 1, 5001, … 动态类型 保存为动态类型Json,运行时检查类型
7
策划不求人 程序少操心 进阶功能
8
序列化和RPC // 用Haxe定义RPC interface IQuestService { // 领取任务 function acceptBasicQuest(basicQuest:Quest.BasicQuest):Future<Reward>; } // C#中把配置表项作为请求参数,调用RPC IQuestService service = bcpRpcSession.outgoingService<IQuestService>(); service.acceptBasicQuest(Quest.Bq1).onComplete(delegate(Reward response) Debug.Print(response); });
9
默认值(与工作表同名的行) public class Quest { public static readonly BasicQuest Bq1 = new Bq1(); public static readonly BasicQuest Bq2 = new Bq2(); } public class BasicQuest public virtual bool Deletable get { return false; } // Bq1使用了默认值 public class Bq1 : BasicQuest {} public class Bq2 : BasicQuest public override bool Deletable get { return true; }
10
运行时公式 public class BasicQuest { public abstract int MinLevel { get; } public virtual int MaxLevel get { return MinLevel+5; } } public class Bq6 : BasicQuest public override int MinLevel get { return 10; } public override int MaxLevel get { return MinLevel+10; }
11
字符串插值 public class Bq6 : BasicQuest { public override int BestLevel get return 15; } public override string Description return "赶紧去吧!建议在" + BestLevel.ToString() + “级以前完成!";
12
函数 public class Bq6 : BasicQuest { public override int BestLevel get return 15; } public override string description( string playerName, bool isMale) return playerName + (isMale?"先生":"小姐") + "赶紧去吧!建议在" + BestLevel.ToString() + “级以前完成!";
13
代数数据类型 (Algebraic Data Type)
public class CompletionCondition {} public class ShaGuai : CompletionCondition { public Character.Monster monster; public int quantity; public ShaGuai(Character.Monster m, int q) this.monster = m; this.quantity = q; } public class Bq2 : BasicQuest public CompletionCondition completionCondition get return new ShaGuai(Character.Monster1, 5);
Similar presentations