第十一章 地图动作与地图事件(Map Action and Map Event)
我们已经有了剧本,而且可以运行剧本,但我们还缺少对地图的操作控制。
我们这一章来完成地图上的操作,地图的操作将全部由MapAction
控制。
文章目录
二 地图剧情(Map Plot)
地图中的剧情和普通的剧情在操作上区别不大。
区别:
-
命令执行器不同;
-
返回上一层不同。
1 返回上一个行动(Back Game Action)
在GameDirector
中,我们缺少了返回上一个动作的方法。
-
它在剧本中是返回上一个剧本动作;
-
而在触发地图剧情结束后,我们同样需要返回上一层的
MapAction
,且我们的MapScenarioAction
并不是由GameDirector
控制,而是由MapAction
控制的。
基于以上,先在GameDirector
中创建返回上一层的方法:
/// <summary>
/// 返回上一个action
/// </summary>
public void BackGameAction()
{
IGameAction old = currentAction;
currentAction = currentAction.previous;
old.Dispose();
if (currentAction == null)
{
// TODO 返回游戏的开始场景
}
}
在ActionStatus
中,我们添加两个状态:
namespace DR.Book.SRPG_Dev.ScriptManagement
{
public enum ActionStatus : int
{
// 省略其它
/// <summary>
/// 返回上一个Action
/// </summary>
BackAction,
/// <summary>
/// 在地图中等待剧情
/// </summary>
WaitScenarioDone
}
}
MapAction
不同于ScenarioAction
。实际上在MapAction
中,ActionStatus
只使用了WaitScenarioDone
、WaitInput
与Error
。而其它方面全部由MapStatus
控制。
在ScenarioAction
中,我们为新的状态添加控制,让它可以返回上一层:
/// <summary>
/// 每帧运行
/// </summary>
/// <returns></returns>
public