我想知道哪种表达方式适合用于生成粒子效果的语言。 假设希望引擎尽可能灵活,它应该具有什么样的“功能”? (除了颜色、位置、速度、加速度等琐碎的内容)
最佳答案
所以每个人都敦促你不要重新发明轮子,这是一个好主意,我对 Python 情有独钟(它允许你的脚本用户也安装和使用大量其他有用的数学库和c),但 LUA 毫无疑问甚至更容易集成(其他脚本语言,如 Ruby 无疑也可以)。不编写自己的临时脚本语言是很好的建议。
但是阅读你的问题向我表明,你的问题更多的是——我的引擎对象的哪些属性(以及哪些对象——粒子,当然,但是,除此之外还有什么)我应该暴露给我的任何脚本语言ember(或者,通过 MS COM 或 .NET,到我的用户喜欢的任何脚本或非脚本语言)?
每个粒子的具体属性(例如您列出的那些)无疑是值得的。除了点状粒子之外,您的引擎中是否还有其他东西,例如表面和其他非点状实体,粒子可能会反弹?吸引力或排斥力又如何呢?你的粒子可能有角动量/自旋吗?
一个好主意是让你的粒子属性“expando”,用一个流行的术语(其他对象模型以不同的方式表达相同的想法)——根据使用你的引擎的应用程序,其他程序员可能决定添加到粒子,无论它们需要什么属性……也许是质量,比如说——也许是电荷——也许是欧分的成本,据你所知或关心;-)。与仅提供“粒子 ID”(当然您应该这样做;-)相比,这使您的用户的生活更轻松,以便他们在哈希表等中使用以跟踪他们关心的特定属性!允许他们添加“方法”和“触发器”(在满足某些条件时自动调用的方法,例如两个粒子比特定距离更近)会很棒,但可能有点困难。
别忘了,顺便说一句,允许一个好的方法将粒子系统的当前状态(包括用户添加的扩展属性)“快照”到指定的流或文件,并从这样的快照中恢复 - 这绝对是在许多用途中至关重要。
除了特定的粒子(如果有的话,可能还包括其他对象,例如表面),您可能应该拥有一个具有自己的属性(包括扩展属性)以及理想的方法和触发器的“全局环境”。例如,作用于所有粒子的力场取决于它们的位置(可能还有它们的电荷、质量等......!-)......
希望其中一些想法能让您感兴趣——我很难说,因为我不知道您的预期应用领域!-)
关于graphics - 我应该为粒子引擎可编写脚本的引擎设计什么样的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1077563/