SRPG游戏开发(五十九)第十一章 地图动作与地图事件 - 八 地图事件(Map Event)

本文是SRPG游戏开发系列的第十一章,主要介绍地图事件的概念和实现,包括地图事件类的设计,如何添加、触发和清除事件,以及如何从文件加载地图事件。地图事件是游戏中关键的交互元素,涉及触发条件和结果,如战斗、剧情等。通过创建MapEvent类和管理事件的集合,开发者能够更好地控制游戏流程。
摘要由CSDN通过智能技术生成

返回总目录

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

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

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



八 地图事件(Map Event)

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

  • 触发条件;

  • 触发结果。

它也比较常见,例如:

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

等等诸如此类的事件。

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


1 地图事件类(Class MapEvent)

我们的地图事件必须包含:

  • 入口条件(主条件);

  • 一些子条件;

  • 触发结果。

当然,还有一些帮助类的属性:

  • 唯一标识(id);

  • 是否只触发一次;

  • 是否触发过。

创建类:

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

namespace DR.Book.SRPG_Dev.ScriptManagement
{
   
    [Serializable]
    public class MapEvent
    {
   
        [XmlAttribute]
        public int id;

        /// <summary>
        /// 是否只能触发一次
        /// </summary>
        [XmlAttribute]
        public bool onlyonce;

        /// <summary>
        /// 进入事件条件的类型
        /// </summary>
        [XmlIgnore]
        public MapEventConditionType entryConditionType;

        /// <summary>
        /// 进入事件条件
        /// </summary>
        [XmlChoiceIdentifier("entryConditionType")]
        [XmlElement("NoneCondition", typeof(Condition)),
            XmlElement("TurnCondition", typeof(TurnCondition)),
            XmlElement("PositionCondition", typeof(PositionCondition)),
            XmlElement("RoleCondition", typeof(RoleCondition), IsNullable = true),
            XmlElement("RoleDeadCondition", typeof(RoleDeadCondition)),
            XmlElement("RoleTalkCondition", typeof(RoleTalkCondition)),
            XmlElement("RoleCombatTalkCondition", typeof(RoleCombatTalkCondition)),
            XmlElement("PropertyCondition", typeof(PropertyCondition), IsNullable = true),
            XmlElement("ItemCondition", typeof(ItemCondition), IsNullable = true)]
        public Condition entryCondition;

        /// <summary>
        /// 额外的事件条件
        /// </summary>
        [XmlArray]
        [XmlArrayItem(typeof(TurnCondition)),
            XmlArrayItem(typeof(PositionCondition)),
            XmlArrayItem(typeof(RoleCondition)),
            XmlArrayItem(typeof(RoleDeadCondition)),
            XmlArrayItem(typeof(PropertyCondition)),
            XmlArrayItem(typeof(ItemCondition))]
        public List<Condition> conditions = new List<Condition>();

        /// <summary>
        /// 事件结果
        /// </summary>
        [XmlArray]
        [XmlArrayItem(typeof(ScenarioResult)),
            XmlArrayItem(typeof(CreateObjectResult)),
            XmlArrayItem(typeof(PositionResult)),
            XmlArrayItem(typeof(PropertyResult)),
            XmlArrayItem(typeof(ItemResult)),
            XmlArrayItem(typeof(WinResult)),
            XmlArrayItem(typeof(LoseResult))]
        public List<Result> triggers = new List<Result>();

        /// <summary>
        /// 是否已经触发过
        /// </summary>
        [XmlIgnore]
        public bool isTriggered {
    get; private 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值