我想知道哪种表达适合用于产生粒子效果的语言.假设想要一个尽可能灵活的引擎,它应该具有什么样的"特征"?(除了颜色,位置,速度,加速度等微不足道的)
不要只为您的应用程序尝试设计一种新语言,而是在其中嵌入另一种完善的语言.看看它为试图实现自己的脚本语言的其他应用程序造成的混乱(mIRC就是一个很好的例子).这意味着用户必须学习另一种语言才能编写应用程序脚本.此外,如果您设计自己的语言,它可能最终没有其他语言有用.不要试图重新发明轮子.
你可能想看看Lua,因为它重量轻,流行,完善,并且设计用于游戏(其用户包括EA,暴雪,Garry的Mod等),并且具有非常小的核心库(它被设计为模块化语言).
所以每个人都在敦促你不要重新发明轮子,这是一个好主意,我对Python有一个情有独钟(这将允许你的脚本用户也安装和使用大量其他有用的数学库和c),但LUA毫无疑问更容易集成(和其他脚本语言,如Ruby也无疑会很好).不编写自己的特殊脚本语言是很好的建议.
但是阅读你的问题告诉我你的问题更多的是 - 我的引擎的对象的属性(以及什么对象 - 粒子,当然,除此之外还有什么)我应该暴露给我的任何脚本语言(或者,通过MS COM或.NET,用我喜欢的脚本或非脚本语言)?
每个粒子的特定属性(例如您列出的那些)无疑是值得的.除了点状粒子之外,你的引擎中是否还有其他东西,例如表面和其他非点状实体,粒子可能反弹?吸引力或排斥力的"力量"怎么样?你的粒子可能有角动量/旋转吗?
一个好主意是让你的粒子的属性"expando",使用一个流行的术语(其他对象模型以不同的方式表达相同的想法) - 取决于使用你的引擎的应用程序,其他程序员可能决定添加到粒子任何属性他们需要...也许质量,比如说 - 可能是电费 - 也许是欧元的成本,对于所有你知道或关心的事情;-).与仅仅提供"粒子ID"(当然你应该使用它;-)让他们在哈希表等中使用以跟踪他们关心的特定属性相比,这使得用户的生活更轻松!允许他们添加"方法"和"触发器"(当某些条件成立时你自动调用的方法,例如两个粒子比一定距离更近)会很棒,但可能会更难.
不要忘了,顺便说一下,允许一个好的方法将粒子系统的当前状态(包含用户添加的expando属性)"快照"到命名的流或文件并从这样的快照恢复 - 这在许多人中绝对是至关重要的使用.
超越特定粒子(以及可能的其他对象,如表面,如果你有它们),你应该有一个"全局环境",它有自己的属性(包括expando),理想情况下也是方法和触发器.例如,一个力场作用于所有粒子,取决于它们的位置(也许是它们的电荷,质量等......! - )......
希望其中一些想法让你觉得有趣 - 我很难说清楚,对你的预期应用领域一无所知! - )