关于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 + '\nreturn ' + 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 }

 

转载于:https://www.cnblogs.com/fyter/p/bind_script_to_hosting.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值