编辑:使用带有three.js库的js。
我们使用循环来避免冗余代码。但是,在这种情况下,for循环与6个几乎相同的行相同,它们应该完成同样的工作。
function isSeen(buttons) {
var rez = true;
if (!frustum.containsPoint(musMesh.position)) rez = false; //OK
/*
for(i = 0; i < buttons.length; i++){
console.log(i); //i does iterate through 0 to 5
if (frustum.containsPoint((buttons[i]).position)) rez = true;
}
*/ //^doesn't work
if (frustum.containsPoint((buttons[0]).position)) rez = true;
if (frustum.containsPoint((buttons[1]).position)) rez = true;
if (frustum.containsPoint((buttons[2]).position)) rez = true;
if (frustum.containsPoint((buttons[3]).position)) rez = true;
if (frustum.containsPoint((buttons[4]).position)) rez = true;
if (frustum.containsPoint((buttons[5]).position)) rez = true;
return rez;
}
for循环导致错误:
未捕获的TypeError:无法读取属性&#39;材料&#39;未定义的
而后面的6条条件语句(它们做同样的事情)不会导致错误并且正常工作。到底是怎么回事? 此外,按钮是 CubeGeometry 的数组,其中 MeshStandard 材料, musMesh 是相同的。
答案 0 :(得分:0)
有更好的方法来实现这一目标,这将确保顺利循环。考虑以下事项:
...some code...
buttons
.forEach( (button,i) => {
rez = frustum.containsPoint(button.position) ? true : false;
})
buttons
是一个数组,它将具有原型函数.forEach()
(button,i) => { ... }
是function(button,i)
boolean_expression ? true : false
是if(boolean_exp) true; else false;