Add Initial commit
This commit is contained in:
72
CM2030 Graphics Programming/Topic 3/3.2.3/sketch.js
Normal file
72
CM2030 Graphics Programming/Topic 3/3.2.3/sketch.js
Normal file
@ -0,0 +1,72 @@
|
||||
//////////////////////////////////
|
||||
// COURSERA GRAPHICS PROGRAMMING
|
||||
//////////////////////////////////
|
||||
// Adapted from https://github.com/nature-of-code/
|
||||
// released under MIT license
|
||||
|
||||
var ball;
|
||||
///////////////////////////////////////////////
|
||||
function setup() {
|
||||
createCanvas(600, 400);
|
||||
ball = new Ball();
|
||||
}
|
||||
///////////////////////////////////////////////
|
||||
function draw() {
|
||||
background(0);
|
||||
let gravity = createVector(0, 0.1);
|
||||
ball.applyForce(gravity);
|
||||
let friction = ball.velocity.copy();
|
||||
friction.mult(-1);
|
||||
friction.normalize();
|
||||
friction.mult(0.01);
|
||||
ball.applyForce(friction);
|
||||
ball.run();
|
||||
}
|
||||
|
||||
function mouseClicked() {
|
||||
ball.location = new createVector(width / 2, height / 2);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////
|
||||
class Ball {
|
||||
constructor() {
|
||||
this.acceleration = new createVector(0, 0);
|
||||
this.velocity = new createVector(0, 0);
|
||||
this.location = new createVector(width / 2, height / 2);
|
||||
this.size = 40;
|
||||
}
|
||||
|
||||
run() {
|
||||
this.draw();
|
||||
this.move();
|
||||
this.bounce();
|
||||
}
|
||||
|
||||
draw() {
|
||||
fill(125);
|
||||
ellipse(this.location.x, this.location.y, this.size, this.size);
|
||||
}
|
||||
|
||||
move() {
|
||||
this.velocity.add(this.acceleration);
|
||||
this.location.add(this.velocity);
|
||||
this.acceleration.mult(0);
|
||||
}
|
||||
|
||||
bounce() {
|
||||
if (this.location.x > width - this.size / 2) {
|
||||
this.location.x = width - this.size / 2;
|
||||
this.velocity.x *= -1;
|
||||
} else if (this.location.x < this.size / 2) {
|
||||
this.velocity.x *= -1;
|
||||
this.location.x = this.size / 2;
|
||||
}
|
||||
if (this.location.y > height - this.size / 2) {
|
||||
this.velocity.y *= -1;
|
||||
this.location.y = height - this.size / 2;
|
||||
}
|
||||
}
|
||||
applyForce(force) {
|
||||
this.acceleration.add(force);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user