SRPG游戏开发(六十三)第十一章 地图动作与地图事件 - 十二 完善地图信息与测试(Perfect MapEventInfo and Testing)

本文介绍了在SRPG游戏开发中如何完善地图信息,包括地图开始和结束事件、胜利结果以及地图事件信息。地图开始事件在读取地图时触发,地图结束事件在地图结束时触发,胜利结果可以根据不同条件设置。此外,文章还讲解了如何进行测试,创建测试脚本并展示了测试结果。
摘要由CSDN通过智能技术生成

返回《SRPG游戏开发》导航

第十一章 地图动作与地图事件(Map Action and Map Event)

我们已经有了剧本,而且可以运行剧本,但我们还缺少对地图的操作控制。

我们这一章来完成地图上的操作,地图的操作将全部由MapAction控制。



十二 完善地图信息与测试(Perfect MapEventInfo and Testing)

我们来测试我们的成果。


1 完善地图信息(Perfect MapEventInfo)

首先,我们先来完善一下地图信息。

我们之前将所有的地图事件都放在了一起,在这里,我们将地图开始和地图结束的事件分开。

1.1 地图开始事件(Map Start Event)

这个事件是在读取地图时触发的。且它没有条件,是直接触发,且只触发一次。

我们在CanTrigger中,让它直接返回true,这样就直接屏蔽了条件。

我们单独建立一个类:

using System;

namespace DR.Book.SRPG_Dev.ScriptManagement
{
   
    [Serializable]
    public class MapEventNoCondition : MapEvent
    {
   
        public override bool CanTrigger(MapAction action)
        {
   
            if (!onlyonce)
            {
   
                onlyonce = true;
            }
            return true;
        }
    }
}
1.2 地图结束事件(Map End Event)

这个事件是在地图结束时触发的。无论它触发什么事件,在结尾都应该触发WinResult或者是LoseResult,同样它们只能触发一次。

所以这个事件,我们添加它们:

using System;
using System.Collections;
using System.Xml.Serialization;

namespace DR.Book.SRPG_Dev.ScriptManagement
{
   
    [Serializable]
    public class MapEventWinLose : MapEvent
    {
   
        [XmlElement("WinResult", typeof(WinResult))]
        [XmlElement("LoseResult", typeof(LoseResult))]
        public Result resultTrigger;

        public override bool CanTrigger(MapAction action)
        {
   
            if (!onlyonce)
            {
   
                onlyonce = true;
            }
            return base.CanTrigger(action);
        }

        public override IEnumerator Trigger(MapAction action, Action<MapEvent> onTriggered = null, Action<string> onError = null)
        {
   
            // 触发过了
            if (isTriggered)
            {
   
                yield break;
            }

            // 是否满足所有触发条件
            if (!CanTrigger(action))
            {
   
                yield break;
            }

            // 触发事件
            if (triggers != null && triggers.Count != 0)
            {
   
                int i = 0;
                while (i < triggers.Count)
                {
   
                    Result trigger = triggers[i++];
                    if (trigger == null)
                    {
   
                        continue;
                    }

                    if (!trigger.Trigger(action))
                    {
   
                        if (onError != null)
                        {
   
                            onError(string.Format("MapEvent {0} -> Event Trigger error.", id));
                        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值