是否有任何游戏引擎使用类似于Scheme,Common Lisp,Clojure或JavaScript的功能编程语言?
我已经尝试过Unity3D,但是它们的“ JavaScript”实际上不是JavaScript,是强类型的并且不起作用。
var add : Func<int, int, int> = ...
是否有任何游戏引擎使用类似于Scheme,Common Lisp,Clojure或JavaScript的功能编程语言?
我已经尝试过Unity3D,但是它们的“ JavaScript”实际上不是JavaScript,是强类型的并且不起作用。
var add : Func<int, int, int> = ...
Answers:
您可以始终在.net平台上使用带有XNA的f#或iron python(是的,我确实知道,python不起作用)或任何其他.netified语言。
http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite
编辑:另外一个用Lisp编写的引擎:http : //code.google.com/p/blackthorn-engine/
我没有书面问题的答案,但我相信您可能会想问“为什么没有更多的功能游戏引擎”,而不是寻找要使用的特定游戏引擎。如果是正确的话,您应该改一下这个问题。如果没有,请忽略我。:)
单纯的功能性方法不适用于游戏。游戏(以及图形,物理和AI)基本上都是关于状态变化的。解决这些问题的正确功能方法是每个循环计算一次完整的新状态,与更直接地编码实际硬件的工作方式相比,这将带来非常严重的性能损失。
因此,您在生产中看不到任何功能样式的游戏引擎。对于游戏引擎要解决的大多数问题,这只是错误的编程范例。对于大多数需要在高级脚本和游戏逻辑代码中解决的问题,这也是错误的编程范例。虽然几乎可以肯定的是,可以制作出功能强大的游戏引擎,但使用起来却很慢,困难且麻烦,除了作为炫耀的演示/玩具之外,没有任何实际目的。
这并不是说函数式编程在游戏中没有位置。我在C#,Unity JavaScript甚至C ++ 11中使用非常实用的编码风格(在适当的地方)。一些非常具体的问题最好或至少最容易用一种功能样式解决,并且当今大多数流行语言都支持这种形式的编程,尽管比“实际”功能语言更麻烦。通常,使用功能性方法解决的这些问题不在核心引擎代码中,也不在游戏本身中运行的代码中。功能编码对于工具和脱机数据处理(例如烘焙模型和其他资产)可能非常有益。在算法编写方面,GPU编程的功能模糊不清也是有争议的,
当然,最好还是在非常特殊的情况下避免使用功能性方法,因为您希望这些脱机工具尽可能快。功能语言擅长并行处理,这对于某些问题很有用,但是硬件的抽象往往导致非常低效的单线程性能。(LISP之类的语言在这里表现出色,因为它们不是纯粹的功能,并且事实上Common LISP是多范式。)对于游戏引擎或相关工具包来说,绝对最糟糕的事情是内容迭代的瓶颈。一个花哨的引擎具有很多功能,需要美工或关卡设计师花费数小时才能完成5分钟(或理想情况下,几乎是立即完成)的工作,这只会导致游戏质量下降或由于预算增加而取消。
Naugthy Dog公司在其游戏引擎上使用了List,它被称为Game Oriented Assembly Lisp。
一些信息可以在这里找到:http : //en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
一些代码示例:http : //web.archive.org/web/20070127022728/http : //lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html
不适用于公共用途。