如何解决Javascript上下文菜单,可在单击时更改变量
在我的three.js应用程序中,我右键单击地板(BoxGeometry),这使上下文菜单出现,因此我可以从一系列不同的纹理中进行选择。虽然这对于一层楼来说是正确的,但我想让它在几层楼上能发挥作用。
这里的纹理和材质1:
const loaderT = new THREE.TextureLoader();
const texture1 = loaderT.load( './textures/32995.jpg' );
const box = new THREE.BoxGeometry( 25,.3,25);
const material1 = new THREE.MeshLambertMaterial( { map: texture1 } );
floor1 = new THREE.Mesh( box,material1 );
floor1.position.set(-12.5,-12.5);
//and repeat for the other textures
我更改楼层的功能如下:
function changeFloor(event)
let targetID = parseInt(event.target.id,10);
var texture;
switch(targetID){
case 35:
texture = texture1;
break;
case 36:
texture = texture2;
break;
case 37:
texture = texture3;
break;
case 38:
texture = texture4;
break;
}
ultimateMat.map = texture;
menu.style.display = "none";
}
在上下文菜单上,其中ID是不同的选择选项。我正在尝试根据要右键单击的楼层来更改UltimateMat变量。
目前,我的鼠标按下功能具有以下功能:
function onMouseDown(event) {
event.preventDefault();
var rightclick;
if (!event) var event = window.event;
if (event.which) rightclick = (event.which == 3);
else if (event.button) rightclick = (event.button == 2);
if (!rightclick) return;
raycaster.setFromCamera(mouse,camera);
var intersects = raycaster.intersectObjects([floor1,floor2,floor3,floor4]);
if (intersects.length) {
intersect = intersects[0].object;
menu.style.left = (event.clientX - rect.left) + "px";
menu.style.top = (event.clientY - rect.top) + "px";
document.getElementById("menuTitle").innerHTML = intersect.name;
menu.style.display = "";
}
else{
intersect = undefined;
}
}
当我右键单击floor1时,如何将UltimateMat变量更改为material1,然后再单击floor2等时,如何将UltimateMat变量更改为material2?
谢谢:)
解决方法
我已经解决了;)
我使用了另一个switch语句来解决问题:
var intersects = raycaster.intersectObjects([floor1,floor2,floor3,floor4]);
if (intersects.length) {
intersect = intersects[0].object;
switch(intersect){
case floor1:
ultimateMat = material1;
break;
case floor2:
ultimateMat = material2;
break;
case floor3:
ultimateMat = material3;
break;
case floor4:
ultimateMat = material4;
break;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。