//Xiaoying Meng
//B
//xiaoyinm@andrew.cmu.edu
//Project 10
var ghosts = [];
var frames = [];
//loading background pictures
function preload(){
var filenames = [];
filenames[0] = "https://i.imgur.com/UFAJ1Wu.png";
filenames[1] = "https://i.imgur.com/snYvk3n.png";
filenames[2] = "https://i.imgur.com/WhWuQcd.png";
filenames[3] = "https://i.imgur.com/u4YZIhW.png";
filenames[4] = "https://i.imgur.com/WhWuQcd.png";
filenames[5] = "https://i.imgur.com/snYvk3n.png";
for ( var a = 0; a < filenames.length; a++){
frames.push(loadImage(filenames[a]));
}
}
function setup() {
createCanvas(480, 480);
frameRate(10);
// initial collection of ghosts
for (var i = 0; i < 10; i++){
var rx = random(width);
ghosts[i] = makeghost(rx);
}
}
function draw() {
//display pictures to create motion
push();
scale(0.5);
image(frames[frameCount % 6], -200,10);
pop();
updateAndDisplayghosts();
removeghostsThatHaveSlippedOutOfView();
addNewghostsWithSomeRandomProbability();
}
function updateAndDisplayghosts(){
// Update ghost positions
for (var i = 0; i < ghosts.length; i++){
ghosts[i].move();
ghosts[i].display();
}
}
function removeghostsThatHaveSlippedOutOfView(){
var ghostsToKeep = [];
for (var i = 0; i < ghosts.length; i++){
if (ghosts[i].x + ghosts[i].gWidth > 0) {
ghostsToKeep.push(ghosts[i]);
}
}
ghosts = ghostsToKeep;
}
function addNewghostsWithSomeRandomProbability() {
// With a very tiny probability, add a new ghost to the end.
var newghostLikelihood = 0.005;
if (random(0,1) < newghostLikelihood) {
ghosts.push(makeghost(width));
}
}
// move ghosts
function ghostMove() {
this.x += this.speed;
}
// Draw ghosts
function ghostDisplay() {
var ghostHeight = this.gHeight * 70;
push();
fill(255,255,255,170);
noStroke(0);
translate(this.x, height -400);
//enlarge ghosts
scale(1.5);
//create ghost body
beginShape();
curveVertex(this.gWidth/8,ghostHeight/5);
curveVertex(this.gWidth/8,ghostHeight/5);
curveVertex(this.gWidth/5-10,ghostHeight/5+30);
curveVertex(this.gWidth/5+5,ghostHeight/5+20);
curveVertex(this.gWidth/5+25,ghostHeight/5+40);
curveVertex(this.gWidth/5+50,ghostHeight/5);
curveVertex(this.gWidth/5+100,ghostHeight/5);
curveVertex(this.gWidth/5+80,ghostHeight/5-70);
curveVertex(this.gWidth/5+50,ghostHeight/5-100);
curveVertex(this.gWidth/5+25,ghostHeight/5-100);
curveVertex(this.gWidth/5+5,ghostHeight/5-70);
curveVertex(this.gWidth/8,ghostHeight/5);
curveVertex(this.gWidth/8,ghostHeight/5);
endShape();
//creat ghost eyes and mouth
fill(0,0,0,170);
ellipse(this.gWidth/5+50,ghostHeight/5-70,this.gWidth/5+5,this.gWidth/5+5);
ellipse(this.gWidth/5+30,ghostHeight/5-70,this.gWidth/5+5,this.gWidth/5+5);
ellipse(this.gWidth/5+40,ghostHeight/5-20,this.gWidth/5+5,this.gWidth/5+20);
pop();
}
function makeghost(birthLocationX) {
var ghost = {x: birthLocationX,
gWidth:random(70,80),
speed: -1.0,
gHeight:random(2,10),
move: ghostMove,
display: ghostDisplay}
return ghost;
}
Since Halloween just passed, I thought I’d do something spooky. So I thought about ghosts. I found a gif of Simpson “can’t fall asleep” and I thought it was perfect for it.