通过XML文件实现人物之间的对话

一、建立一个XML文档,放在项目中Assert/Resources/XML文件下

XML的内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <dialogues1>
 4   <dialogue>
 5     <role>门派长老</role>
 6     <detail>李清,你找我意欲何事?</detail>
 7   </dialogue>
 8   <dialogue>
 9     <role>李清</role>
10     <detail>回禀长老,弟子最近想出城历练一番,望长老允</detail>
11   </dialogue>
12   <dialogue>
13     <role>门派长老</role>
14     <detail>城外老虎数量不断增多,已经威胁到了人们的出行</detail>
15   </dialogue>
16   <dialogue>
17     <role>李清</role>
18     <detail>弟子愿去赶走虎群</detail>
19   </dialogue>
20   <dialogue>
21   <role>门派长老</role>
22   <detail>这里是500金币,你去准备一些随身物品,明天出发</detail>
23   </dialogue>
24   <dialogue>
25     <role>李清</role>
26     <detail>弟子明白</detail>
27   </dialogue>
28 </dialogues1>

二、新建一个C#脚本,读取文件

脚本主要代码如下:

1、加载XML文件,将文件的数据存入到LIst集合中去

 1  public static List<string> ListXml;//定义一个string类型的List集合

 1 public static int listIndex = 0; 
1 public static string role;//角色名字
2 public static string role_detail;//角色的对话
 4 public static void LoadXML(string name)
 5     {
 6         ListXml = new List<string>();
 7         XmlDocument xmlDocument = new XmlDocument();//定义一个XmlDocument
 8         string data = Resources.Load(@"XML\"+name).ToString();//Resources加载XML文档
 9         xmlDocument.LoadXml(data);
10         //SelectSingleNode(name).ChildNodes 查询该文档下的所有子集,返回一个集合
11         XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode(name).ChildNodes;
12         //遍历集合,给每个子集(每条对话)增加一个分割标识符“:”,方便下面字符串的分割
13         foreach (var xmlNode in xmlNodeList)
14         {
15             XmlElement xmlElement = (XmlElement)xmlNode;
16             ListXml.Add(xmlElement.ChildNodes.Item(0).InnerText+":"+ xmlElement.ChildNodes.Item(1).InnerText);
17         }
18     }

2、分割集合中的子集(每条对话),根据每个子集的角色名字(role),显示出所对应的UI

 1  //分割每个子集(每条对话)
 2     public static void ListDiv(List<string> rolelist,int index)
 3     {
 4
 5         string[] role_array = rolelist[index].Split(‘:‘);//将每条对话从设置好的标识符“:”分割
 6         role = role_array[0];//角色名字
 7         role_detail = role_array[1];//角色对话
 8         Debug.Log(role +":"+ role_detail);
 9         string text = role + ":" + role_detail;
10         //根据上面分割的role(角色名字),显示所对应的对话框
11         switch (role)
12         {
13             case "李清":
14                 //显示UI界面
15                 //text值传过去
16                 //我这里用的是UI框架 和 一个text的全局变量来控制的
17                 TTUIPage.ShowPage<Liqin>();
18                 Global_Variable.Liqin_text.text = text.ToString();
19                 break;
20             case "门派长老":
21                 TTUIPage.ShowPage<Dean>();
22                 Global_Variable.Dean_text.text = text.ToString();
23                 break;
24         }
25     }

3、加载XML文件,读取对话

 1 private void Start()
 2     {
 3         //调用LoadXML方法
 4         LoadXML("dialogues1");
 5     }
 6     private void Update()
 7     {
 8         if (Input.GetMouseButtonDown(0))
 9         {
10             //通过集合的长度,判断对话是否全部读取完毕
11             if (listIndex >= ListXml.Count - 1)
12             {
13                 //对话读取完毕
14             }
15             else
16             {
17                 //读取行下一条对话
18                 listIndex++;
19                 //调用ListDiv方法继续加载对话
20                 ListDiv(ListXml, listIndex);
21             }
22         }
23     }

原文地址:https://www.cnblogs.com/fancy0629/p/9110206.html

时间: 2024-11-05 12:08:15

通过XML文件实现人物之间的对话的相关文章

C#关于xml文件和TreeView之间的转换解析

public partial class ParseXmlFilesForm : Form { public static WirelessCharge celfras = new WirelessCharge(); public static StreamWriter logSW = null; public static FileStream logFS = null; #region 变量声明 private string xmlFilePath; private string rootN

C# datatable 与 xml文件之间的转换

/// <summary> /// datatable转XML文件 /// </summary> /// <param name="dtTable"></param> /// <param name="strXMLPath"></param> /// <returns></returns> public bool DataTableToXML(DataTable dtTa

XML文件与实体类之间的互相转换

二 序列化 XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中.这样如果需要用到配置信息,没必要每次都读写XML文件,只需要调用Config这个类就可以获取对应节点的信息. config.xml: <?

MyBatis应用开发(2)应用之开发方式XML文件篇

1.1. 开发方法 有三种使用MyBatis的方法: (1)使用XML配置文件的方式. (2)使用注解方式. (3)使用API方式. 1.2. XML方式 1.2.1. 开发步骤 目标:使用MyBatis从数据库中查询t_person表的全部记录. MyBatis使用XML文件来配置数据库中的记录与Java对象之间的映射关系,实现了SQL语句和Java代码的分离. 使用MyBatis 的XML配置方式开发数据库应用的步骤如下所示: (1)编写POJO类Person. (2)编写Mapper接口P

笔记:MyBatis Mapper XML文件详解 - 映射和参数

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是最强大的元素,用来描述

python 读取xml文件

首先,获得标签信息abc.xml <?xml version="1.0" encoding="utf-8"?> <catalog> <maxid>4</maxid> <login username="pytest" password="123456"> <caption>Python</caption> <item id="4&

XML文件的解析和序列化

序列化: private void createXml() { XmlSerializer serializer = Xml.newSerializer();// xml文件生成器 File file = new File(Environment.getExternalStorageDirectory(), "person.xml"); FileOutputStream fos = null; try { fos = new FileOutputStream(file); serial

C++通过TinyXML类库读写XML文件

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系. 使用之前,需要先下载TinyXML类库:http://download.csdn.net/detail/tennysonsky.也可在sourceforge上下载

Android动态加载XML文件及控件来简单实现QQ好友印象的功能

在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态加载控件来简单实现QQ中好友印象的功能,其中也会提到如何来动态加载一个XML的配置文件. 那么要实现好友印象的功能,我们需要通过以下这几个步骤: 1.界面一开始需要加载一个EditText和Button控件,用于填写好友印象和添加好友印象: 2.需要新建一个arrays.xml,在xml文件中添加上