繁体   English   中英

如何为Three.js中的init()外部创建的网格设置动画?

[英]How to animate a mesh created outside init() in three.js?

我正在学习three.js,并且想了解如何为常规init()之外的函数创建的网格设置动画。

我可以在init()内部创建一个多维数据集,并在animate()内部旋转它,但是如果该多维数据集是由init()外部的函数创建的,则控制台会说未定义多维数据集。

这是一个简单的示例: http : //jsfiddle.net/mattsparrer/yqbp5hx4/10/

function createCube(size) {
    var geometry = new THREE.CubeGeometry(size, size, size);
    var material = new THREE.MeshNormalMaterial();

    cube = new THREE.Mesh(geometry, material);
    scene.add(cube);
    }

通过在Web上搜索,我了解“多维数据集”不在animate()的范围内,但是我找不到正确的方法。 请有人可以解释走的路吗?

这不是一个Three.js问题,而是一个JavaScript 变量范围问题。

如果申报cube的内部变量init()函数,它将只提供内部init()而不是内部的render() 您必须在这两个函数之外声明它,以使其对两个函数均可用。

错误:

function init(){
    // Declaring cube inside this function limits its scope
    var cube = new THREE.Mesh();
}

function render(){
    // Cube is not defined.
    // it's only available within the init() function.
    cube.rotation.y += 0.01;
}

console.log(cube); // Cube is also not defined out here.

正确:

// Declare cube in global scope so both functions can "see" this variable
var cube;

function init(){
    // Assigns value to existing cube var
    cube = new THREE.Mesh();
}

function render(){
    // cube is also available inside this function
    cube.rotation.y += 0.01;
}

console.log(cube); // No error, because cube exists out here too

有关变量范围的更多示例,请参见此处: JavaScript中变量的范围是什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM