zoukankan      html  css  js  c++  java
  • 关于js脚本宿主对脚本代码的绑定

    脚本代码绑定,Unity3D是这样做的。为了体现Unity3D的基于对象设计,Unity3D可以为每个对象绑定多个脚本文件,可以是js,可以是cs,也可以是boo。

    threejs/editor也有与Unity3D类似的开发方式——绑定脚本给对象,比如场景,物体,灯光……。

    单说js吧,这个是我当前需要用到的技术,cs已经可以理论上解决了,boo不需要,我更需要的是lua。

    js脚本不像cs那样,需要一个类来承载update,start等宿主要调用的事件,仅需要在文件中写好全局函数名update、start即可。

    threejs中的解决办法是将绑定的脚本保存在了json里,是一段字符串而已。在实际运行app时,将代码作为一个函数的主体,并将代码里面的函数塞到js对象作为返回值。然后执行这个函数,将内部的函数绑定给场景里的对应对象上。

     1 for (var uuid in json.scripts) {
     2     var object = scene.getObjectByProperty('uuid', uuid, true);
     3     if (object === undefined) {
     4         console.warn('APP.Player: Script without object.', uuid);
     5         continue;
     6     }
     7     var scripts = json.scripts[uuid];
     8     for (var i = 0; i < scripts.length; i++) {
     9         var script = scripts[i];
    10         var functions = (new Function(scriptWrapParams, script.source + '
    return ' + scriptWrapResult + ';').bind(object))(this, renderer, scene, camera);
    11         for (var name in functions) {
    12             if (functions[name] === undefined) continue;
    13             if (events[name] === undefined) {
    14                 console.warn('APP.Player: Event type not supported (', name, ')');
    15                 continue;
    16             }
    17             events[name].push(functions[name].bind(object));
    18         }
    19     }
    20 }
  • 相关阅读:
    PyTorch Tutorials——LEARN THE BASICS
    vscode+remote ssh搭建《dive into deep learning》所需环境
    node.js02 安装Node环境
    node.js01 认识node.js
    二分查找
    暴力枚举
    博客园自定义域名
    斐波那契数列(公兔子掳母兔子问题)
    为什么我要写博客?
    C++基本语法
  • 原文地址:https://www.cnblogs.com/fyter/p/bind_script_to_hosting.html
Copyright © 2011-2022 走看看