未捕获的TypeError:无法读取未定义的p5.js / node.js / socket.io的属性'copy'

时间:2017-03-07 04:49:13

标签: node.js socket.io p5.js

连接第二个客户端时出错。我的代码通过 p5.Vector.dist()比较两个客户的当前位置,并且出现了错误,就在这里。

enter image description here

p5.Vector.dist(p5.js:25914)中的行是

p5.Vector.prototype.dist = function (v) {
  var d = v.copy().sub(this); //This is the exact line where the error says from
  return d.mag();
};

这是我的代码;

客户方;

//I use for loop to see all the contain of otherCircles
for(var x = 0; x < otherCircles.length; x++){
		if(otherCircles[x].id != socket.id){ //To make sure i won't compare the client's data to its own because the data of all connected client's is here
			console.log(otherCircles[x].radius); //To see if the data is not null
			if(circle.eat(otherCircles[x])){
				if(circle.radius * 0.95 >= otherCircles[x].radius){
					otherCircles.splice(x,1);
					console.log('ATE');
				} else if(circle.radius <= otherCircles[x].radius * 0.95){
					zxc = circle.radius;
					asd = zxc;
					circle.radius = null;
					console.log('EATEN');
				}
			}
		}
	}

//Here's the eat function of the circle

function Circle(positionX,positionY,radius){
//The variables of Circle()
        this.position = createVector(positionX, positionY);
	this.radius = radius;
	this.velocity = createVector(0, 0);
  
  //Here's the eat function
  this.eat = function(other) {
      var distance = p5.Vector.dist(this.position, other.position); //Heres where the error 
      if (distance < this.radius + (other.radius * 0.25)) { //Compare there distance
        return true;
      } else {
        return false;
      }
    }
}

otherCircles [] 包含;

enter image description here

这也是 console.log(otherCircles [x] .radius); 一行的输出。

我不认为服务器端是必要的,因为它只是接收客户端的当前位置和大小,并将其他客户端的位置和大小发送到。所有数据都存储在 otherCircles()中。行 console.log(otherCircles [x] .radius); 结果不为空,所以我知道有数据与客户端位置进行比较,为什么我会遇到这样的错误。

1 个答案:

答案 0 :(得分:1)

如果没有MCVE,很难帮助你,但我会尝试引导你完成调试。

您已打印otherCircles[x].radius,这是一个好的开始。但如果我是你,我想更多地了解otherCircles[x]。它包含哪些变量和函数?我首先使用Google搜索“对象的JavaScript打印函数名称”,然后尝试弄清楚该对象中的确切内容。 otherCircles[x].position的价值是什么?

从那里开始,我还要确保定义了otherCircles[x].position并且p5.Vector的实例。它有copy()函数吗?

我也可以使用调试器逐步完成代码 - 每个浏览器都有一个,你应该熟悉它的使用。

如果您仍然无法正常工作,请发布我们可以通过复制粘贴来运行的MCVE。这意味着没有服务器代码,只需硬编码您的值,以便我们可以看到相同的错误。我打赌你在尝试将其缩小到一个小例子时发现了你的问题。但如果没有,我们将从那里开始。祝你好运。