第十一章 地图动作与地图事件(Map Action and Map Event)
我们已经有了剧本,而且可以运行剧本,但我们还缺少对地图的操作控制。
我们这一章来完成地图上的操作,地图的操作将全部由MapAction
控制。
文章目录
一 初始化地图动作(Initialize Map Action)
在进行地图动作的编写之前,我们先要进到地图才可以。
所以在这里,我们先建立一个空的类,然后编写进入地图的命令。
创建地图动作类:
namespace DR.Book.SRPG_Dev.ScriptManagement
{
public class MapAction : GameAction
{
public MapAction() : base()
{
}
public MapAction(IGameAction gameAction) : base(gameAction)
{
}
/// <summary>
/// 读取地图
/// </summary>
/// <param name="scriptName"></param>
/// <returns></returns>
public bool Load(string scriptName)
{
// TODO 读取地图相关
return true;
}
// TODO 其它
}
}
1 地图战斗命令执行器(battle Command Executor)
进入地图是剧本中的特殊命令,它将指定剧情进入到哪个地图进行战斗,命令将使用关键字battle
。
我们需要解析的命令如下:
battle Stage0Scene stage0script;
我们需要的参数为:
-
地图场景(
Stage0Scene
),它指定了战斗地图所在场景(Scene); -
地图剧情(
stage0script
),它指定了在地图参数(地图如何初始化)。
这些等号符号和二元运算符号也是可以自定义的。
创建执行器类与参数类:
namespace DR.Book.SRPG_Dev.ScriptManagement
{
public class BattleExecutor : ScenarioContentExecutor<BattleExecutor.BattleArgs>
{
public struct BattleArgs
{
public string sceneName;
public string scriptName;
}
public override string code
{
get {
return "battle"; }
}
// TODO ParseArgs and Run
}
}
1.1 ParseArgs
public override bool ParseArgs(IScenarioContent content, ref BattleArgs args, out string error)
{
// battle Stage0Scene stage0script;
if (content.length != 3)
{
error = GetLengthErrorString(3);
return false;
}
args.sceneName = content[1];
args.scriptName = content[2];
error = null;
return true;
}
1.2 Run
在战斗结束时,需要一个标识来标识战斗结果,这里我们采用一个变量(规定0
为战斗失败,1
为战斗胜利);我们还要存储地图的场景与剧本,这些存储我们依然放在ScenarioBlackboard
中。
private static string s_BattleMapScene;
private static string s_MapScript;
public static string battleMapScene
{
get {
return s_BattleMapScene; }