SRPG游戏开发(五十七)第十一章 地图动作与地图事件 - 六 地图事件的条件(Condition of Map Event)

本文详细介绍了在SRPG游戏开发中地图事件的条件,包括类条件、回合条件、位置条件、角色条件、属性条件、物品条件等。这些条件决定了事件何时触发,丰富了游戏的交互性和策略性。
摘要由CSDN通过智能技术生成

返回总目录

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

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

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



六 地图事件的条件(Condition of Map Event)

地图事件是我们地图中所发生的事情,包括:

  • 触发条件;

  • 触发结果。

它也比较常见,例如:

条件 结果 FE4中实例
地图开始 创建各种地图对象 战斗开始时的剧情,然后创建地图对象
角色到达某个地点 获取物品 第一章时斧骑士到达海边获取二回攻击斧
某回合开始 创建各种地图对象 某些剧情需要
对应角色对话 获取物品、提升属性等 某些章节对话

等等诸如此类的事件。

这一节,我们挑选一些典型的事件来说明。


1 条件类(Class Condition)

每一个事件,大多需要一些条件才能触发,这就需要我们知道这些条件是什么。

且每个事件需要的条件可能是多种,但都需要一个进入的条件(主条件),其它为子条件。

首先,我们先来归类一下条件类型:

创建一个枚举MapEventConditionType来表示条件类型(它们不是必须的,按需来):

using System;

namespace DR.Book.SRPG_Dev.ScriptManagement
{
   
    [Serializable]
    public enum MapEventConditionType
    {
   
        NoneCondition = 0,

        /// <summary>
        /// 回合
        /// </summary>
        TurnCondition,

        /// <summary>
        /// 位置
        /// </summary>
        PositionCondition,

        /// <summary>
        /// 角色id
        /// </summary>
        RoleCondition,

        /// <summary>
        /// 属性
        /// </summary>
        PropertyCondition,

        /// <summary>
        /// 角色死亡
        /// </summary>
        RoleDeadCondition,

        /// <summary>
        /// 对话
        /// </summary>
        RoleTalkCondition,

        /// <summary>
        /// 战斗对话
        /// </summary>
        RoleCombatTalkCondition,

        /// <summary>
        /// 物品
        /// </summary>
        ItemCondition
    }
}

这些条件并不都是进入条件,我们规定:

  • NoneCondition:没有条件,进入地图时触发;

  • TurnCondition:回合条件,当回合开始时触发;

  • PositionCondition:位置条件,当角色到达此坐标时触发,常与RoleCondition连用;

  • RoleCondition:角色条件,不是主条件,常做为其它条件的子条件使用;

  • PropertyCondition:属性条件,不是主条件,常做为其它条件的子条件使用;

  • RoleDeadCondition:死亡条件,角色死亡时触发;

  • RoleTalkCondition:对话条件,两个角色有对话时触发,常与TurnCondition连用(在某些回合范围内可对话);

  • RoleCombatTalkCondition:战斗对话条件,两个角色发生战斗时触发;

  • ItemCondition:物品条件,不是主条件,常做为其它条件的子条件使用(例如(不)持有某些物品时)。

这以上只是一些常见条件,都是按需。它们有些只能触发一次,而有些可以触发多次(例如《FE4》中的教会)。

我在这里依然选择了xml作为保存它们的文件类型。

而这些条件需要返回一个布尔类型,来表示条件是否满足。

创建类:

        [Serializable]
        public class Condition
        {
   
            [XmlIgnore]
            public virtual MapEventConditionType type
            {
   
                get {
    return MapEventConditionType.NoneCondition; }
            }

            public virtual bool GetResult(MapAction action)
            {
   
                return true;
            }
        }

2 回合条件(Turn Condition)

在回合条件中,我们在只有在此回合内才能触发,所以它需要:

  • 最小回合;

  • 最大回合;

  • 回合内的阵营。

只有在阵营对应且在当前回合比最小回合大,比最大回合小时才会触发。

        [Serializable]
        public class TurnCondition : Condition
        {
   
            [XmlAttribute]
            public int minTurn;
            [XmlAttribute]
            public int maxTurn;
            [XmlAttribute]
            public bool allAttitudeTowards;
            [XmlAttr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值