2017-07-27 69 views
0

我有一段代码需要为3D场景制作动画。我这样做,使用类和函数在代码中整齐地构建3D场景。这本身就是一个文本输出的东西。从CoffeeScript中的某个函数返回一个对象

逻辑上它不需要吐出文字。 Threejs库应该与我构建的内容交互。

我想例如做这样的事情:

class Tile extends SuperSpace 
    height: 2 
    sideLength: 10 
class Plain extends Tile 
    constructor: ({ @color = 'lightgreen', @height = @height, @heightPlacement = 2 } = {}) -> 
    console.log """ 
        New plain: 
        color: '#{@color}' 
        sideLength: #{@sideLength} 
        height: #{@height} 
        heightPlacement: #{@heightPlacement} 
       """ 
    mesh: -> 
    geometry = new THREE.BoxGeometry 10/10, 2/10, 10/10 
    material = new THREE.MeshBasicMaterial { color: 0x22ff22 } 
    cube = new THREE.Mesh geometry, material 
    return cube 

,并调用它在场景简直就像这样:

scene.add plain.mesh 

这只不过是一个越来越少修改了文档中的现有示例。 plain.mesh应该是退货cube

不知何故物体没有得到槽。我要么得到undefined或让我的整个机能恢复控制台:

function() { 
     var cube, geometry, material; 
     geometry = new THREE.BoxGeometry(10/10, 2/10, 10/10); 
     material = new THREE.MeshBasicMaterial({ 
     color: 0x22ff22 
     }); 
     cube … 

几乎没有令人满意的。有什么建议么?

+0

这是一个函数引用:'plain.mesh'。这是一个函数调用:'plain.mesh()'。当没有任何参数时,括号是必需的。 –

回答

1

这工作:

class Tile extends SuperSpace 
    height: 2 
    sideLength: 10 
class Plain extends Tile 
    constructor: ({ @color = 'lightgreen', @height = @height, @heightPlacement = 2 } = {}) -> 
    console.log """ 
        New plain: 
        color: '#{@color}' 
        sideLength: #{@sideLength} 
        height: #{@height} 
        heightPlacement: #{@heightPlacement} 
       """ 
    mesh: -> 
    geometry = new THREE.BoxGeometry 10/10, 2/10, 10/10 
    material = new THREE.MeshBasicMaterial { color: 0x22ff22 } 
    cube = new THREE.Mesh geometry, material 
    return cube 

plain = new Plain() 
console.log plain.mesh()