我正在探索THREE.js
,并尝试使用不同的几何形状。因此,由于它具有多种几何结构,因此手动编写每一个都太无聊了。
我必须写这些行才能显示一个简单的多维数据集:
var material = new THREE.MeshNormalMaterial();
var boxGeometry = new THREE.BoxGeometry( 20, 20, 20 );
var box = new THREE.Mesh( boxGeometry, material );
box.position.set(-10, -10, 0);
scene.add( box );
要再说一个圆锥体,我只需要复制粘贴上面的行,然后将Box
替换为Cone
,就可以知道这是我计算机的工作(不是我的)。人类不是用来复制的:)
所以我想要一个通用class
之后,我可以说:
var cube = new Shape('Cube', 20, 20, 20);
// or
var cone = new Shape('Cone', 20, 30);
&可能为我做其他所有事情,我可以从函数中提取arguments
,但是该怎么办?
说如何将它们从字符串转换为逻辑语句?
答案 0 :(得分:1)
使用括号表示法,您可以创建一个访问Three.<word>Geometry
的函数,同时使用rest语法收集其他参数,然后将其传播到构造函数中:
function makeShape(shapeName, ...args) {
var material = new THREE.MeshNormalMaterial();
var boxGeometry = new THREE[shapeName + 'Geometry'](...args);
var box = new THREE.Mesh( boxGeometry, material );
box.position.set(-10, -10, 0);
scene.add( box );
}
然后,只需调用该函数:
makeShape('Cube', 20, 20, 20);
makeShape('Cone', 20, 30);
如果您要将在函数中创建的内容分配给makeShape
的调用者,只需在结尾return
。