gpt4 book ai didi

C# 如何用名称的字符串调用不同的函数?

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:36 25 4
gpt4 key购买 nike

我正在为游戏实现对话系统。我将 xml 用于数据,因为我希望可以从外部编辑/添加对话,而且我遇到了以前从未遇到过的编程问题。

假设我有这个 XML 元素:

<Action character="MC" name="giveItem" item="Potion" quantity="2"/>

它应该告诉系统它必须给 MC 2 药水。在一个例子中,像这样:

MainCharacter.Inventory.giveItem("Potion",2)

我的问题是:如何调用 giveItem() 以及我可能会在我的游戏中使用的其他函数以及来自“名称”属性的名称字符串?到目前为止,我已经看到(没有实现)反射作为一种可能性和一个字符串字典作为键和委托(delegate)作为值。

我想知道在开始对系统的那部分进行编码之前是否有更好的方法。如果重要的话,我正在使用 Unity。

最佳答案

如果您使用的是 Unity,另一种方法是调用 GameObject.SendMessage 方法。

http://docs.unity3d.com/ScriptReference/GameObject.SendMessage.html

参数作为对象传递,所以你必须找到一种方法将你的参数传递到容器上,接收它的函数必须知道如何“解压缩”它们,但我猜是字典从字符串转换为对象对于参数来说是可以的。

使用委托(delegate)的问题在于它们必须是同一类型(采用相同数量和类型的参数),但您可以使用全部采用字典的委托(delegate),如上所述。

另一种方法是实现命令设计模式,将行为封装在一个对象中: http://gameprogrammingpatterns.com/command.html

本质上,在读取 XML 时,您将创建一个属于 Command 子类的 GiveItemCommand 对象。然后,您将在需要应用操作时执行该对象。

关于C# 如何用名称的字符串调用不同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com