【问题标题】:Using javascript for custom purposes将 javascript 用于自定义目的
【发布时间】:2012-08-20 12:43:21
【问题描述】:

我正在编写一个光线追踪器,作为我完整 3d 引擎的一部分。我打算使用 javascript 作为脚本语言,而不是自己编写。问题是我该如何使用它?顺便说一句,光线追踪器和 UI 是用 C# 编写的。

【问题讨论】:

  • 你的光线追踪器真的需要脚本吗?你能描述一下脚本的性质吗?可能有更好的技术可用于此脚本。
  • 创建动画会容易得多。目前我正在使用 xml,它对于动画来说非常冗长和困难。 Javascript 将不那么冗长。
  • 抱歉,我想我对什么是“光线追踪器”有一个过时的概念。我知道它们是通过跟踪来自光源的光线所采取的路径来帮助渲染 3D 图形的程序。这样的事情对脚本没有用处。无论如何,我怀疑是否有必要从 XML 一路跳到 JavaScript。也许特定领域的语言将是一个很好的中间步骤。这样的东西可以产生可以被编译以提供更高性能的代码。
  • 我想使用 javascript 作为 UI 的一部分,而不是光线追踪库。 Javascript 将是一种简单快捷的代码编写方式。
  • @JohnSaunders 但是有了这个问题的答案,它会比从头开始的领域特定语言更丰富,工作更少。我没有回答,因为自从 .NET 之前我就没有这样做过,但是通过 COM 在半天内添加对知名脚本语言的全面支持肯定比花几天时间来获得自定义的初始规范语言。

标签: c# javascript 3d raytracing


【解决方案1】:

这显示了 Javascript 和 c# 之间的双向交互。

  1. Javascript 调用一个 c# 方法
  2. C# 获取 Javascript 中表达式的结果

-

Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));

dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "javascript";
obj.AddObject("MyClass",new JSAccessibleClass());

obj.Eval("MyClass.MsgBox('Hello World')"); //<--1
var result = obj.Eval("3+5"); //<--2


[ComVisible(true)]
public class JSAccessibleClass
{
    public void MsgBox(string s)
    {
        MessageBox.Show(s);
    }
}

【讨论】:

    【解决方案2】:

    虽然可以使用 JavaScript 作为 .Net 应用程序的脚本,但它并不是最流行的选择。如果您可以选择其他语言 - IronPython 或 LUA.Net 可能是您将获得更好支持的选择。我最近在类似问题中列出了几个链接:Write npc scripts to be executed by c# using class with npc methods

    否则 JavaScript.Net(.Net 框架的一部分)或其他显式 .Net 或具有 .Net 绑定的实现将用作脚本语言。

    【讨论】:

      【解决方案3】:

      有许多 JavaScript 的独立实现可供您用于此目的:

      这里是 JavaScript 上 stackoverflow 信息页面的链接,其中列出了许多这些实现:https://stackoverflow.com/tags/javascript/info

      【讨论】:

      • 很抱歉,该链接有什么帮助
      • @Belos 它在页面顶部列出了许多独立的实现。 Rhino、V8 等
      猜你喜欢
      • 2016-01-12
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 2019-02-23
      相关资源
      最近更新 更多