I have been trying to make this code work for two days. I'm quite new to javaScript
and P5.js
, I have tried to make the same in processing with java and it has worked perfectly. Here is an image of my target.
The balls however, do not connect in the p5.js
version.
I do not know what could be the problem. Any help would be much appreciated
Here is my P5.js
code with necessary anotations
//creating an empty array named balls for it to be filled with ball objects
var balls=[];
// a variable that holds the number of balls which are desired
var NOB = 10;
function setup()
{
//creating canvas
createCanvas(600,600);
//filling the array with Ball objects. The constructor is defined below the draw function
for(var i=0; i<NOB; i++)
{
balls[i] = new Ball();
print(balls[i]);
}
}
function draw() {
background(0);
//calling every ball object with all of their functions. Move which moves the ball, disp which draws an ellipse, and connect which
//checks if the balls are within a certain distance and connects them with a red line
for(var i=0; i<NOB; i++)
{
balls[i].move();
balls[i].disp();
for(var j=0; j<NOB; j++){
//I do not want a ball to connect to itself and that is why I added the (i!=j) contidion so that it wont connect to itself
if(i!=j){
//with the connect function I try to send each other object within the array to be check if it is close to a certian ball
balls[i].connect(balls[j]);
}
}
}
}
//defing the Ball constructor
function Ball()
{
//diameter for each ball
var d=20;
//the x and y positions are taking random values that consider the diameter so that the balls wont go out of the canvas
var xPos= random(d,width-d/2);
var yPos= random(d,height-d/2);
//the factors that move the balls
var xPosf=random(0.1,3);
var yPosf=random(0.1,3);
//displays a white ball
this.disp=function()
{
fill(255);
noStroke();
ellipse(xPos,yPos,d,d);
}
//moves the ball
this.move=function()
{
xPos+=xPosf;
yPos+=yPosf;
//if the ball touches the end or beginning of the canvas it will have its factor variable reversed so it will go in the other direction. giving it a bounce
if(xPos>width-d/2 || xPos<d/2){xPosf=xPosf*-1;}
if(yPos>height-d/2 || yPos<d/2){yPosf=yPosf*-1;}
}
//checks if the balls are close and connects them with a red line
this.connect= function(other)
{
if(dist(xPos,yPos,other.xPos,other.yPos)<100)
{
stroke(255,0,0);
line(xPos,yPos,other.xPos,other.yPos);
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.16/p5.js"/>
<html>
<head></head>
<body></body>
</html>