javascript - 试图从内部函数访问函数参数
问题描述
我正在使用three.js
一个类似于OrbitControls
我的控制器的脚本。在我的main.js
文件中,我有一个THREE.Group()
作为参数传递给控制器的。从那里,我试图轮换整个组。
问题 1:一旦组被传递给控制器,我不能再访问它的属性而不制作副本
问题 2:副本不包含整个THREE.Group()
,而只包含第一个孩子
我已经为此工作了几个小时,并且尝试了大约 50 种不同的东西,包括与 stackoverflow 相关的任何东西。我完全不知道如何解决这个问题。
main.js
let container;
let camera;
let controls;
let game;
let renderer;
let scene;
function init() {
container = document.querySelector('#scene-container');
scene = new THREE.Scene();
const fov = 35;
const aspect = container.clientWidth / container.clientHeight;
const near = 0.1;
const far = 100;
camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
//***** This is the important line ******
controls = new THREE.ObjectControls(camera, container, game);
game = new THREE.Group();
scene.add(game);
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial();
var mesh1 = new THREE.Mesh(geometry, material);
game.add(mesh1);
var mesh2 = new THREE.Mesh(geometry, material);
mesh2.position.set(0,1,0);
game.add(mesh2);
renderer = new THREE.WebGLRenderer();
renderer.setSize(container.clientWidth, container.clientHeight);
renderer.setPixelRatio(window.devicePixelRatio);
container.appendChild(renderer.domElement);
renderer.setAnimationLoop(() => {
renderer.render(scene, camera);
});
}
init();
对象控件.js
THREE.ObjectControls = function (camera, domElement, objectToMove) {
mesh = objectToMove;
domElement.addEventListener('mousemove', mouseMove, false);
function mouseMove(e) {
//** objectToMove is undefined :( **
mesh.rotation.y += 3;
}
};
预期的结果是整个THREE.Group()
game
将被旋转,但我得到的结果是只有第一个孩子game
被旋转,在这种情况下mesh1
。
解决方案
controls = new THREE.ObjectControls(camera, container, game);
game = new THREE.Group();
您的代码中有一个错误,因为您将undefined
变量传递game
给ObjectControls
. 如果game
稍后将新对象分配给一行,ObjectControls
则不会引用此变量。
这个想法是先将组对象分配给game
然后创建ObjectControls
。你基本上切换了两条线。
three.js R105
推荐阅读
- python - 如果元素不是无,如何替换列表中的元素值?
- c++ - 作用域与编译器优化的相关性
- r - 使用 R 中的汇总,按查找汇总度量、非 NA 值和特定值进行分组
- reactjs - 减速器中的 Action.balances 有效负载不更新物理余额
- spotfire - 如何在 spotfire 中正确设置参数化信息链接?
- javascript - 将对象转换为数组时遇到问题
- macos - 在 OSX 上的 SDL2 中,如何将 Joy-Con 的控制杆从“帽子”模式切换到“模拟”模式?
- c# - 创建与任何没有属性且没有子元素的元素匹配的 XSD
- batch-file - 批量 - 使用输入更改帐户密码
- sql-server - Web 服务帐户无权在表上选择或在函数上执行,即使它是公共角色的一部分