Javascript 当我运行代码时,浏览器不断崩溃
我有以下代码:Javascript 当我运行代码时,浏览器不断崩溃,javascript,while-loop,three.js,crash,Javascript,While Loop,Three.js,Crash,我有以下代码: var images = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.jpg", "image6.jpg", "image7.jpg", "image8.jpg"]; var objects = []; var geometry; while(objects.length < images.length) { var imagesIndex = 0; v
var images = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.jpg", "image6.jpg", "image7.jpg", "image8.jpg"];
var objects = [];
var geometry;
while(objects.length < images.length) {
var imagesIndex = 0;
var object = [
texture1 = textureLoader.load( "data/"+ images[imagesIndex] ),
material1 = new THREE.MeshBasicMaterial( { map: texture1 } ),
objectMesh = new THREE.Mesh( geometry, material1 ),
location3d = new THREE.Vector3( Math.random()* 500-250, Math.random()* 500-250, Math.random()* 500+120 )
];
var overlapping = false;
for (var j = 0; j < objects.length; j++) {
var projectCubeLoc = objects[j][0][3];
但现在我得到TypeError:无法读取未定义的属性“0”
当我在浏览器中运行此代码时,浏览器会崩溃。。。我没有收到任何错误消息,浏览器将崩溃并自行退出。。。
我认为这与while循环有关,但我不知道是什么错了
非常感谢任何帮助或提示
如果需要更多的代码,或者如果您希望看到JSFIDLE,只需问:)您没有为对象数组分配任何内容 您的代码从未到达对象。请在for循环中推送调用
您将数组初始化为空,因此当它到达查找
j==0
和objects.length==0
时,循环不会运行。我不确定您是否正在使用Unity3d,但当我尝试执行这样一个C#代码时,它发生在我身上。
实际上,您正在循环中声明一个变量,每次它更新时,它总是将该变量的值设置为零,使其成为网格
while(objects.length
循环开始时,您必须
空数组,它将首先通过,因为此时间长度为
对象小于图像数组
object
,该变量
应该被推入或添加到对象中
(我的假设
根据命名)。然后你是(var j=0;jvar images=[“image1.jpg”,“image2.jpg”,“image3.jpg”,“image4.jpg”,“image5.jpg”,“image6.jpg”,“image7.jpg”,“image8.jpg”];
var对象=[];
几何图形=新的三个长方体几何图形(100100100,10,10);
while(objects.length
我用一个名为object的对象替换了对象数组。通过这种方式,我可以从数组中获取所需的数据,而不必处理0个未定义的错误。现在效果很好;)感谢@Asad Jamil提供的所有帮助,希望这对将来的任何人都有帮助:)当您启动循环时,
对象
数组为空。所以你的for
循环永远不会运行。for
循环中的代码是唯一可以向对象
数组添加任何内容的东西。你已经有了一个无限循环。任何javascript都不应该使浏览器崩溃并突然退出。您的代码中可能有一个bug,但浏览器中也有一个bug,不同浏览器的行为会有所不同(所以您应该说您使用的是哪个浏览器)。您还可以尝试在代码中的不同点插入警报,以了解它在崩溃浏览器之前能走多远。然后你可以试着绕过有问题的那一行(也许还可以向浏览器作者提交一份bug报告)。我正在使用一个名为three.jsI的javascript库。我对js是新手,不知道上面提到的库使用了什么。但是我分享了我的个人经历。谢谢你的解释:)你能给我一个解决方案吗?给我更多的洞察力?一般来说,我对编程很陌生。。。因为我自己也无法真正理解这一点:(@FutureCake你不明白什么?你能描述一下吗?在哪一部分你想让我多放点光?你的意思是什么:你有一个空数组,它一开始会通过,因为对象的时间长度小于图像数组。你确切地说,初始通过是什么意思?哦,我想我明白了!因为对象数组是空的for循环永远不会运行,因为长度=0,这就是为什么没有添加任何内容。然后,你会得到一个不受约束的循环,因为while循环一直在尝试…那么,当对象第一次添加到对象数组中时,我该如何使它运行呢?当然,我明天会创建一个,谢谢你迄今为止的所有帮助!)
var otherCubesLoc = projectCubeLoc[j];
var distance = projectCubeLoc.distanceTo( otherCubesLoc );
console.log(distance);
if (distance < 150) {
overlapping = true;
break;
};
};
if (!overlapping) {
objects.push(object);
imagesIndex++;
};
};
var images = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.jpg", "image6.jpg", "image7.jpg", "image8.jpg"];
var objects = [];
geometry = new THREE.BoxGeometry( 100, 100, 100,10,10 );
while(objects.length < images.length) {
var imagesIndex = 0;
var object = {};
object.texture1 = textureLoader.load( "data/"+ images[imagesIndex] );
object.material1 = new THREE.MeshBasicMaterial( { map: object.texture1 } );
object.objectMesh = new THREE.Mesh( geometry, object.material1 );
object.location3d = new THREE.Vector3( Math.random()* 500-250, Math.random()* 500-250, Math.random()* 500+120 );
var overlapping = false;
for (var j = 0; j < objects.length; j++) {
var projectCubeLoc = objects[j].location3d;
var distance = projectCubeLoc.distanceTo( object.location3d );
if (distance < 150) {
overlapping = true;
break;
};
};
if (!overlapping) {
objects.push(object);
imagesIndex++;
object.objectMesh.position = object.location3d;
console.log(object.location3d);
scene.add(object.objectMesh);
};
};
console.log(objects);