import javax.swing.*;
Ball [] balls;
PVector wind = new PVector(0.03, 3);
PVector gravity = new PVector(0.1, 0.1);
void setup() {
size(800, 600);
smooth();
background(255);
int ballCount = Integer.parseInt(
JOptionPane.showInputDialog("Enter a number of balls between 1 and 200", "30" ));
String str = JOptionPane.showInputDialog("Who will be using this program?:");
JOptionPane.showMessageDialog(null, "The name you entered is:\n\n " + str
+ "\n\nLength: " + str.length() + " characters"
+ "\nCapital: " + str.toUpperCase());
// limit to sane number of balls
if ((ballCount<0) || (ballCount>200)) {
ballCount = 30;
}
balls = new Ball[ballCount];
for (int i = 0; i < balls.length; i++) {
balls[i] = new Ball(random(0.1, 5), 0, 0);
}
}
//Draw method to display the ball on screen.
void draw() {
//gray fill function with alpha mask
fill(190, 30);
rect(0, 0, width, height);
for (int i = 0; i < balls.length; i++) {
balls[i].applyForce(wind);
balls[i].applyForce(gravity);
balls[i].update();
balls[i].display();
balls[i].wallBounce();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public class Ball {
//Private fields.
private PVector location;
private PVector velocity;
private PVector acceleration;
private float mass;
private float diameter;
// Ball parameters
public Ball(float m, float x, float y) {
mass = m;
location = new PVector(x, y);
velocity = new PVector(0, 0);
acceleration = new PVector(0, 0);
diameter = 20;
}
public void applyForce(PVector force) {
PVector f = PVector.div(force, mass);
acceleration.add(f);
}
public void update() {
velocity.add(acceleration);
location.add(velocity);
acceleration.mult(0);
}
//Method to draw a ball on the canvas.
public void display() {
stroke(0);
strokeWeight(5);
fill(0, 255, 150);
strokeWeight(1.3);
ellipse(location.x, location.y, mass*diameter, mass*diameter);
}
// Method to update due to ball-wall collisions
public void wallBounce() {
// Accessing individual components of PVector
if (location.x > width) {
location.x = width;
velocity.x *= -1;
} else if (location.x < 0) {
velocity.x *= -1;
location.x = 0;
}
if (location.y > height) {
velocity.y *= -1;
location.y = height;
}
}
public PVector location()
{
return location;
}
public PVector velocity()
{
return velocity;
}
public PVector acceleration()
{
return acceleration;
}
public float mass()
{
return mass;
}
public float getDiameter()
{
return diameter;
}
public void setDiameter(float diameter)
{
if (diameter >= 0) {
this.diameter = 11;
} else {
this.diameter = 20;
}
}
}
Hello guys. First let me warn you that i am a total noob.
It took me ages to get to here but i got a working animation with the use of array.
I would need some help with coloring each ball in different color.
I did try random fill in RGB but that just creates a flashing disco.
What can i do to make this?
Thank you.