Я построил блок в функции, где его значение присваивается переменной с именем box, затем я попытался установить цвет узла, нажав «w», вызвав мою переменную блока и определив ее как другую произвольную переменную.
<html>
<head>
<title>My first three.js app</title>
<style>
body { margin: 0; }
canvas { width: 100%; height: 100% }
</style>
</head>
<body>
<script src = "js/three.js"></script>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75,
window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
camera.position.z = 5;
renderer.render( scene, camera );
var box= function() {
this.root = new THREE.Object3D;
}
box.prototype.buildBox = function(){
var geometry = new THREE.BoxGeometry( 0.2, 0.3, 0.1 );
var material = new THREE.MeshLambertMaterial( {
color: "white", // CSS color names can be used!
} );
var a= new THREE.Mesh( geometry, material );
this.root.add(a);
return this.root;
};
this.scene.add(this.buildBox());
document.addEventListener("keydown", onDocumentKeyDown, false);
function onDocumentKeyDown(event) {
var keyCode = event.which;
this.Box = new box();
var b = this.Box.buildBox();
var keyCode = event.which;
if (keyCode == 87) {
b.material.color.setHex (0xfff00);
}
render();
</script>
Насколько я понимаю, довольно много вещей идет не так. Не могли бы вы попытаться выяснить, работает ли каждая часть так, как вы ожидаете, и исправить то, что не работает, чтобы вы могли сузить свой вопрос до определенной части кода, которую вы все еще не понимаете?
ну, я предполагаю, что все работает правильно, за исключением моей функции «onDocumentKeyDown (event)», я думаю, что я неправильно вызываю мою функцию buildBox.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


у вас есть ошибки? Какой результат сейчас? Попробуйте использовать
console.info(), если вы еще этого не сделали :)