Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 为XNA游戏实现一种简单的基于XML的脚本语言_Windows_Parsing_Xna_Windows Phone 7_Scripting Language - Fatal编程技术网

Windows 为XNA游戏实现一种简单的基于XML的脚本语言

Windows 为XNA游戏实现一种简单的基于XML的脚本语言,windows,parsing,xna,windows-phone-7,scripting-language,Windows,Parsing,Xna,Windows Phone 7,Scripting Language,我和一个团队一起在C#和XNA开发RPG引擎。我们计划瞄准Windows和Windows Phone 7,但在动画中遇到了AI交互和控制玩家动作的问题。在大多数情况下,所有内容都是使用MVC设计模式提取的,但是将所有逻辑和运动抽象到控制器中可能会导致问题。因此,我们的想法是要有一个接口(IScriptEngine),它接受一个iscriptoObject并相应地更新地图模型中的数据。 我在考虑将脚本放在XML语法中: <Script Name="MoveNPC_1"> &l

我和一个团队一起在C#和XNA开发RPG引擎。我们计划瞄准Windows和Windows Phone 7,但在动画中遇到了AI交互和控制玩家动作的问题。在大多数情况下,所有内容都是使用MVC设计模式提取的,但是将所有逻辑和运动抽象到控制器中可能会导致问题。因此,我们的想法是要有一个接口(IScriptEngine),它接受一个iscriptoObject并相应地更新地图模型中的数据。 我在考虑将脚本放在XML语法中:

<Script Name="MoveNPC_1"> 
    <Action Command="MoveToTile" Target="NPC_1" Value="10,2"/> 
</Script> 
就连我高中的编程经验都告诉我,这是个坏主意,但我想不出其他解决办法

编辑:
我想在地图文件中嵌入这一切。在MapXML文件中,我们为指定了区域,其中包含多个标记。然后会有一个部分,指定NPC在地图上的位置,以及它将使用什么资源和脚本。然后会有一个部分,在那里定义所有的战斗(同样,定义资源什么的),然后可能会有一个部分,在那里定义这些脚本。我只是希望有一种使用WP7动态编译C#的方法。如果我能得到双方的支持,这就不是问题了。我想知道是否有任何Mono库可以移植到WP7,共享CodeDom和所有编译器类的功能?

您可以使用现有的XML解析器,有很多不同的方法(SAX、StAX)和可用于多种语言的解析器


然后,您可以使用XPath引用文档中的节点。

您可以使用现有的XML解析器,有很多不同的方法(SAX、StAX)和可用于多种语言的解析器


您可以使用XPath来引用文档中的节点。

您可能希望考虑嵌入一个真实的语言,而不是使用XML语法。有一个原因,你看不到许多编程语言建立在实际的XML语法上!对于实际的编程任务来说,这是非常尴尬的。

,您可能希望考虑嵌入一种真正的语言,而不是使用XML语法。有一个原因,你看不到许多编程语言建立在实际的XML语法上!对于实际的编程任务来说,这真的很尴尬。

XML脚本<坚强>喘息现在,这是“可能会导致后续问题”的事情

为什么不直接使用C#?我听说非常棒。我已经给了我的建议

您需要问问自己:您的脚本真的需要数据驱动吗?数据不能用C#表示有什么原因吗

它们真的需要在运行时进行解释吗?因为,如果他们真的这样做了,那就是

还有一个,在gamedev.stackexchange.com上。我甚至在这里举了一个可能实现的小例子

如果您想要执行的动作超过一帧(基本上是联合例程),例如:“走到这里,说话,等待,走到那里”,您也可以做得很好


编辑:如果您想混合使用XML级别和C#script,下面是一个示例:

<Level>
    <Door position="4,4" name="spookyDoor" />
    <Region position="4,2" name="spookyOpener" />
</Level>

XML脚本<坚强>喘息现在,这是“可能会导致后续问题”的事情

为什么不直接使用C#?我听说非常棒。我已经给了我的建议

您需要问问自己:您的脚本真的需要数据驱动吗?数据不能用C#表示有什么原因吗

它们真的需要在运行时进行解释吗?因为,如果他们真的这样做了,那就是

还有一个,在gamedev.stackexchange.com上。我甚至在这里举了一个可能实现的小例子

如果您想要执行的动作超过一帧(基本上是联合例程),例如:“走到这里,说话,等待,走到那里”,您也可以做得很好


编辑:如果您想混合使用XML级别和C#script,下面是一个示例:

<Level>
    <Door position="4,4" name="spookyDoor" />
    <Region position="4,2" name="spookyOpener" />
</Level>

您是否需要在运行时解释脚本?你说你的开发是内容驱动的,这是一件好事。但是,为了利用使用XML或脚本语言带来的速度和效率的提高,您不一定需要对脚本进行解释

我遵循Shawn Hargreaves创建XML数据并允许内容管道将其编译成.XNB的示例。如果你实现了一个脚本系统,或者集成了一个现有的脚本,并为其创建了一个ContentPipeline项目,那么你可以只编译添加或修改的脚本,与重新编译整个该死的游戏相比,运行之间的停机时间非常少

而且我肯定不会选择XML,XNA可能会自动为它设置一个导入器,但尝试使用它会非常难看。应该是XNA的lua图书馆,应该可以很好地处理这类事情

让设计人员编译到.XNB与您在引擎(如Source)中所做的废话没有多大区别

此外,我发现以下内容对于思考脚本化事件非常有用:


您是否需要在运行时解释脚本?你说你的开发是内容驱动的,这是一件好事。但是,为了利用使用XML或脚本语言带来的速度和效率的提高,您不一定需要对脚本进行解释

我遵循Shawn Hargreaves创建XML数据并允许内容管道将其编译成.XNB的示例。如果你实现了一个脚本系统,或者集成了一个现有的脚本,并为其创建了一个ContentPipeline项目,那么你可以只编译添加或修改的脚本,与重新编译整个该死的游戏相比,运行之间的停机时间非常少

我绝对不会去
public void LevelStart()
{
    this.Regions["spookyOpener"].OnPlayerEnter += () =>
    {
        (this.Items["spookyDoor"] as Door).Open();
    };
}