processing实现canvas万圣节捉鬼游戏代码
代码语言:html
所属分类:游戏
代码描述:processing实现canvas万圣节捉鬼游戏代码,这个游戏是基于Google涂鸦“2018万圣节”的主题。在游戏中,幽灵们组队竞争,看谁能在月亮消失之前收集到最多的游荡鬼火。但途中会有一些意外的转折...使用方向键或WASD键来移动和收集鬼火。你可以从敌人那里偷取鬼火,但要小心,他们也可以偷走你的。将鬼火带回你的基地可以获得积分。请注意,不同的鬼火会给你不同的能力。
代码标签: processing canvas 万圣节 捉鬼 游戏 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
* {
margin: 0;
box-sizing: border-box;
overflow: hidden;
}
body {
background: #242424;
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
body canvas {
box-shadow: 0.2em 0.2em 2em #0008;
border: none;
outline: none;
}
</style>
</head>
<body translate="no">
<canvas id="canvas"></canvas>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/processing.1.4.8.js"></script>
<script >
var sketchProc = function(processingInstance) {
with (processingInstance) {
size(600, 600);
frameRate(60);
smooth();
var game;
//Keys/Mouse
{
//Key|Button stuff
var clicked = false;
var hover = false;
var keys = [];
keyPressed = function () {
keys[keyCode] = true;
};
keyReleased = function () {
keys[keyCode] = false;
};
mouseClicked = function () {
clicked = true;
};
}
/** @created_by MKaelin368 (KWC) (c) 2018 */
var setKALoopTimeout = function (ms) {
var method_name = "KAInfiniteLoopSetTimeout";
if (method_name in this) {
this[method_name](ms >>> 0);
}
};
var Button = function (config) {
this.x = config.x || 0;
this.y = config.y || 0;
this.size = config.size || 100;
this.content = config.content || "Home";
this.page = config.page || "home";
this.textSize = config.textSize || this.size / 5;
this.borderColor = color(12, 31, 3, 20);
this.backColor = color(70, 71, 71, 150);
this.textColor = config.textColor || color(170, 170, 170);
this.backColorHover = color(102, 105, 105, 150);
this.textColorHover = color(130, 130, 130);
this.growth = 0;
this.func = config.func || function() {};
this.draw = function () {
pushStyle();
textAlign(CENTER, CENTER);
textSize(this.textSize + (this.growth * 0.1));
noStroke();
//shadow
fill(20, 20, 20, 30);
ellipse(this.x, this.y + this.size * 0.52, (this.size + this.growth) * 0.8, (this.size + this.growth) * 0.3);
//circles
if (dist(mouseX, mouseY, this.x, this.y) <= this.size / 2) { //hover
hover = true;
this.growth = constrain(this.growth + 0.5, 0, 10);
if (clicked) {
this.func();
}
fill(this.backColorHover);
stroke(this.borderColor);
noStroke();
ellipse(this.x, this.y, this.size + this.growth, this.size + this.growth);
fill(this.textColorHover);
switch(this.content) {
case "Play":
triangle(this.x + this.size*0.25, this.y, this.x - this.size*0.15, this.y - this.size*0.25, this.x - this.size*0.15, this.y + this.size*0.25);
break;
case "How":
pushStyle();
textSize(this.size*0.6);
text("?", this.x, this.y);
popStyle();
break;
case "Sound":
pushStyle();
noStroke();
fill(this.textColorHover);
triangle(this.x, this.y - this.size * 0.3, this.x, this.y + this.size * 0.3, this.x - this.size * 0.3, this.y);
rect(this.x - this.size * 0.3, this.y - this.size * 0.1, this.size * 0.3, this.size * 0.2);
if(game.sound) {
noFill();
stroke(this.textColorHover);
strokeWeight(this.size/20);
arc(this.x + this.size * 0.1, this.y, this.size * 0.2, this.size * 0.2, -91, 90);
arc(this.x + this.size * 0.1, this.y, this.size * 0.4, this.size * 0.4, -81, 80);
}
else {
noFill();
stroke(this.textColorHover);
strokeWeight(this.size/20);
line(this.x + this.size * 0.1, this.y - this.size * 0.1, this.x + this.size * 0.25, this.y + this.size * 0.1);
line(this.x + this.size * 0.1, this.y + this.size * 0.1, this.x + this.size * 0.25, this.y - this.size * 0.1);
}
popStyle();
break;
case "Story":
pushStyle();
noFill();
stroke(this.textColorHover);
strokeWeight(4);
line(this.x-this.size*0.23, this.y-this.size*0.2, this.x+this.size*0.23, this.y-this.size*0.2);
line(this.x-this.size*0.23, this.y, this.x+this.size*0.23, this.y);
line(this.x-this.size*0.23, this.y+this.size*0.2, this.x+this.size*0.23, this.y+this.size*0.2);
popStyle();
break;
case "Scoreboard":
pushStyle();
noFill();
stroke(this.textColorHover);
strokeWeight(this.size * 0.14);
strokeCap(SQUARE);
line(this.x, this.y + this.size * 0.25, this.x, this.y - this.size * 0.3);
line(this.x - this.size * 0.2, this.y + this.size * 0.25, this.x - this.size * 0.2, this.y - this.size * 0.1);
line(this.x + this.size * 0.2, this.y + this.size * 0.25, this.x + this.size * 0.2, this.y - this.size * 0.2);
popStyle();
break;
case "Back":
pushStyle();
beginShape();
vertex(this.x+this.size*0.25, this.y); //1
vertex(this.x+this.size*0.25, this.y+this.size*0.25); //2
vertex(this.x+this.size*0.07, this.y+this.size*0.25); //3
vertex(this.x+this.size*0.07, this.y+this.size*0.12); //4
vertex(this.x-this.size*0.07, this.y+this.size*0.12); //5
vertex(this.x-this.size*0.07, this.y+this.size*0.25); //6
vertex(this.x-this.size*0.25, this.y+this.size*0.25); //7
vertex(this.x-this.size*0.25, this.y); //8
vertex(this.x, this.y-this.size*0.2); //9
vertex(this.x+this.size*0.25, this.y); //10
endShape();
noFill();
stroke(this.textColorHover);
strokeWeight(this.size*0.05);
line(this.x-this.size*0.27, this.y-this.size*0.05, this.x, this.y-this.size*0.27);
line(this.x+this.size*0.27, this.y-this.size*0.05, this.x, this.y-this.size*0.27);
line(this.x+this.size*0.15, this.y-this.size*0.19, this.x+this.size*0.15, this.y-this.size*0.25);
popStyle();
break;
case "Replay":
pushStyle();
noFill();
stroke(this.textColorHover);
strokeWeight(5);
pushMatrix();
translate(this.x, this.y);
rotate(radians(game.rate * 5));
arc(0, 0, this.size * 0.6, this.size * 0.6, 1, 275);
noStroke();
fill(this.textColorHover);
translate(this.size * 0.30, -this.size * 0.18);
rotate(radians(-70));
triangle(0, -this.size * 0.1, -this.size * 0.14, -this.size * 0.3, this.size * 0.14, -this.size * 0.3);
popMatrix();
popStyle();
break;
default:
text(this.content, this.x, this.y);
}
}
else { //not hover
this.growth = constrain(this.growth - 0.5, 0, 10);
fill(this.backColor);
strokeWeight(2);
stroke(this.borderColor, 100);
noStroke();
ellipse(this.x, this.y, this.size + this.growth, this.size + this.growth);
fill(this.textColor);
switch(this.content) {
case "Play":
triangle(this.x + this.size*0.25, this.y, this.x - this.size*0.15, this.y - this.size*0.25, this.x - this.size*0.15, this.y + this.size*0.25);
break;
case "How":
pushStyle();
textSize(this.size*0.6);
text("?", this.x, this.y);
popStyle();
break;
case "Sound":
pushStyle();
noStroke();
fill(this.textColor);
triangle(this.x, this.y - this.size * 0.3, this.x, this.y + this.size * 0.3, this.x - this.size * 0.3, this.y);
rect(this.x - this.size * 0.3, this.y - this.size * 0.1, this.size * 0.3, this.size * 0.2);
if(game.sound) {
noFill();
stroke(this.textColor);
strokeWeight(this.size/20);
arc(this.x + this.size * 0.1, this.y, this.size * 0.2, this.size * 0.2, -91, 90);
arc(this.x + this.size * 0.1, this.y, this.size * 0.4, this.size * 0.4, -81, 80);
}
else {
noFill();
stroke(this.textColor);
strokeWeight(this.size/20);
line(this.x + this.size * 0.1, this.y - this.size * 0.1, this.x + this.size * 0.25, this.y + this.size * 0.1);
line(this.x + this.size * 0.1, this.y + this.size * 0.1, this.x + this.size * 0.25, this.y - this.size * 0.1);
}
popStyle();
break;
case "Story":
pushStyle();
noFill();
stroke(this.textColor);
strokeWeight(4);
line(this.x-this.size*0.23, this.y-this.size*0.2, this.x+this.size*0.23, this.y-this.size*0.2);
line(this.x-this.size*0.23, this.y, this.x+this.size*0.23, this.y);
line(this.x-this.size*0.23, this.y+this.size*0.2, this.x+this.size*0.23, this.y+this.size*0.2);
popStyle();
break;
case "Scoreboard":
pushStyle();
noFill();
stroke(this.textColor);
strokeWeight(this.size * 0.14);
strokeCap(SQUARE);
line(this.x, this.y + this.size * 0.25, this.x, this.y - this.size * 0.3);
line(this.x - this.size * 0.2, this.y + this.size * 0.25, this.x - this.size * 0.2, this.y - this.size * 0.1);
line(this.x + this.size * 0.2, this.y + this.size * 0.25, this.x + this.size * 0.2, this.y - this.size * 0.2);
popStyle();
break;
case "Back":
pushStyle();
beginShape();
vertex(this.x+this.size*0.25, this.y); //1
vertex(this.x+this.size*0.25, this.y+this.size*0.25); //2
vertex(this.x+this.size*0.07, this.y+this.size*0.25); //3
vertex(this.x+this.size*0.07, this.y+this.size*0.12); //4
vertex(this.x-this.size*0.07, this.y+this.size*0.12); //5
vertex(this.x-this.size*0.07, this.y+this.size*0.25); //6
vertex(this.x-this.size*0.25, this.y+this.size*0.25); //7
vertex(this.x-this.size*0.25, this.y); //8
vertex(this.x, this.y-this.size*0.2); //9
vertex(this.x+this.size*0.25, this.y); //10
endShape();
noFill();
stroke(this.textColor);
strokeWeight(this.size*0.05);
line(this.x-this.size*0.27, this.y-this.size*0.05, this.x, this.y-this.size*0.27);
line(this.x+this.size*0.27, this.y-this.size*0.05, this.x, this.y-this.size*0.27);
line(this.x+this.size*0.15, this.y-this.size*0.19, this.x+this.size*0.15, this.y-this.size*0.25);
popStyle();
break;
case "Replay":
pushStyle();
noFill();
stroke(this.textColor);
strokeWeight(5);
pushMatrix();
translate(this.x, this.y);
rotate(radians(sin(game.rate * 5) * 20));
arc(0, 0, this.size * 0.6, this.size * 0.6, 1, 275);
noStroke();
fill(this.textColor);
translate(this.size * 0.30, -this.size * 0.18);
rotate(radians(-70));
triangle(0, -this.size * 0.1, -this.size * 0.14, -this.size * 0.3, this.size * 0.14, -this.size * 0.3);
popMatrix();
popStyle();
break;
default:
text(this.content, this.x, this.y);
}
}
popStyle();
};
};
var Avatar = function(config) {
this.type = config.type || 0;
this.draw = function() {
switch(this.type) {
case 0: //Jade
pushMatrix();
pushStyle();
//face
noStroke();
fill(255, 255, 255);
beginShape();
vertex(50, 5);
bezierVertex(65, 4, 86, 15, 91, 34);
bezierVertex(94, 58, 82, 72, 63, 79);
bezierVertex(36, 82, 16, 72, 11, 52);
bezierVertex(8, 32, 20, 12, 50, 5);
endShape(CLOSE);
//body
fill(131, 255, 174, 150);
stroke(20, 104, 26, 70);
strokeWeight(8);
beginShape();
vertex(50, 3);
bezierVertex(69, 3, 88, 8, 97, 32);
bezierVertex(102, 58, 101, 82, 100, 101);
bezierVertex(99, 110, 100, 115, 90, 118);
bezierVertex(79, 116, 80, 109, 79, 103);
bezierVertex(77, 110, 70, 117, 62, 119);
bezierVertex(52, 119, 48, 114, 44, 106);
bezierVertex(42, 112, 32, 120, 20, 116);
bezierVertex(13, 113, 9, 104, 9, 95);
bezierVertex(11, 79, 6, 70, 5, 47);
bezierVertex(4, 24, 23, 3, 50, 3);
endShape(CLOSE);
//eyes
noStroke();
fill(0, 97, 0);
ellipse(39, 29, 25, 23);
ellipse(70, 26, 25, 23);
//eyeballs
fill(174, 255, 174);
ellipse(43, 30, 11, 10);
ellipse(66, 27, 11, 10);
//mouth
noFill();
stroke(0, 97, 0, 100);
strokeWeight(3);
bezier(39, 48, 44, 53, 54, 55, 59, 52);
popStyle();
popMatrix();
break;
case 1: //Sage
pushMatrix();
pushStyle();
//face
noStroke();
fill(255, 255, 255);
beginShape();
vertex(50, 5);
bezierVertex(65, 4, 86, 15, 91, 34);
bezierVertex(98, 60, 87, 76, 74, 77);
bezierVertex(32, 88, 12, 74, 11, 52);
bezierVertex(8, 32, 20, 12, 50, 5);
endShape(CLOSE);
//body
fill(131, 255, 174, 150);
stroke(20, 104, 26, 70);
strokeWeight(8);
beginShape();
vertex(50, 3);
bezierVertex(69, 3, 88, 8, 97, 32);
bezierVertex(102, 58, 101, 82, 100, 101);
bezierVertex(99, 110, 100, 115, 90, 118);
bezierVertex(79, 116, 80, 109, 78, 108);
bezierVertex(77, 110, 70, 117, 62, 119);
bezierVertex(52, 119, 48, 114, 44, 106);
bezierVertex(42, 112, 32, 120, 20, 116);
bezierVertex(13, 113, 9, 104, 9, 95);
bezierVertex(11, 79, 6, 70, 5, 47);
bezierVertex(4, 24, 23, 3, 50, 3);
endShape(CLOSE);
//glasses
noFill();
stroke(206, 114, 30);
strokeWeight(4);
beginShape();
vertex(21, 15);
bezierVertex(48, 12, 69, 9, 83, 6);
bezierVertex(85, 18, 82, 23, 74, 26);
bezierVertex(65, 27, 62, 22, 58, 15);
bezierVertex(58, 22, 56, 33, 43, 34);
bezierVertex(31, 34, 25, 25, 21, 16);
endShape(CLOSE);
strokeWeight(2);
line(24, 22, 58, 17);
line(28, 28, 56, 23);
line(61, 16, 84, 12);
line(63, 23, 83, 17);
//mouth
noFill();
stroke(0, 97, 0, 100);
strokeWeight(3);
bezier(23, 33, 32, 46, 44, 43, 49, 41);
popStyle();
popMatrix();
break;
case 2: //Kelly
pushMatrix();
pushStyle();
noStroke();
//face
fill(255, 255, 255);
beginShape();
vertex(50, 5);
bezierVertex(65, 4, 86, 15, 91, 34);
bezierVertex(94, 58, 82, 68, 63, 73);
bezierVertex(36, 77, 16, 72, 11, 52);
bezierVertex(8, 32, 20, 12, 50, 5);
endShape(CLOSE);
//body
fill(131, 255, 174, 150);
stroke(20, 104, 26, 70);
strokeWeight(8);
beginShape();
vertex(50, 3);
bezierVertex(69, 3, 88, 8, 97, 32);
bezierVertex(100, 58, 93, 82, 100, 101);
bezierVertex(101, 110, 100, 115, 90, 118);
bezierVertex(77, 116, 77, 109, 74, 103);
bezierVertex(74, 110, 67, 117, 59, 119);
bezierVertex(47, 119, 43, 114, 39, 96);
bezierVertex(42, 112, 32, 120, 20, 116);
bezierVertex(13, 113, 9, 104, 9, 95);
bezierVertex(11, 79, 6, 70, 5, 47);
bezierVertex(4, 24, 23, 3, 50, 3);
endShape(CLOSE);
//eyes
noStroke();
fill(0, 97, 0);
ellipse(44, 21, 21, 19);
ellipse(65, 20, 21, 19);
//eyeballs
fill(174, 255, 174);
ellipse(47, 22, 8, 7);
ellipse(62, 21, 8, 7);
//mouth
noStroke();
fill(0, 97, 0, 100);
beginShape();
vertex(35, 33);
bezierVertex(42, 33, 45, 44, 55, 43);
bezierVertex(61, 43, 64, 49, 62, 54);
bezierVertex(55, 60, 43, 57, 33, 52);
bezierVertex(27, 43, 29, 36, 35, 33);
endShape(CLOSE);
popStyle();
popMatrix();
break;
case 3: //Olive
pushMatrix();
pushStyle();
//ears
fill(131, 255, 174, 150);
stroke(20, 104, 26, 70);
strokeWeight(8);
beginShape();
vertex(67, 14);
bezierVertex(72, 8, 79, 7, 85, 5);
bezierVertex(89, 15, 91, 21, 90, 29);
endShape(CLOSE);
beginShape();
vertex(37, 17);
bezierVertex(30, 10, 22, 8, 15, 7);
bezierVertex(11, 19, 17, 31, 20, 38);
endShape(CLOSE);
//face
noStroke();
fill(255, 255, 255);
beginShape();
vertex(50, 12);
bezierVertex(65, 10, 86, 15, 91, 34);
bezierVertex(97, 58, 82, 68, 63, 71);
bezierVertex(36, 74, 16, 68, 11, 52);
bezierVertex(8, 32, 20, 17, 50, 12);
endShape(CLOSE);
//body
fill(131, 255, 174, 150);
stroke(20, 104, 26, 70);
strokeWeight(8);
beginShape();
vertex(50, 7);
bezierVertex(69, 7, 88, 8, 97, 32);
bezierVertex(102, 58, 101, 82, 100, 101);
bezierVertex(99, 110, 100, 115, 90, 118);
bezierVertex(79, 116, 80, 109, 79, 103);
bezierVertex(77, 110, 70, 117, 62, 119);
bezierVertex(52, 119, 48, 114, 44, 106);
bezierVertex(42, 112, 32, 120, 20, 116);
bezierVertex(13, 113, 9, 104, 9, 95);
bezierVertex(11, 79, 6, 70, 5, 47);
bezierVertex(4, 24, 23, 8, 50, 7);
endShape(CLOSE);
//eyes
noStroke();
fill(0, 97, 0);
ellipse(32, 28, 10, 9);
ellipse(74, 24, 10, 9);
//mouth
noFill();
stroke(0, 97, 0, 100);
strokeWeight(3);
bezier(46, 32, 48, 36, 53, 36, 55, 32);
bezier(55, 33, 58, 35, 62, 36, 63, 30);
//fish
//head
noStroke();
fill(127, 136, 117);
beginShape();
vertex(55, 36);
bezierVertex(67, 42, 74, 48, 71, 53);
bezierVertex(60, 55, 50, 55, 46, 54);
bezierVertex(45, 51, 51, 43, 55, 36);
endShape(CLOSE);
fill(177, 185, 157);
beginShape();
vertex(55, 36);
bezierVertex(67, 42, 74, 48, 71, 52);
bezierVertex(56, 53, 59, 55, 55, 36);
endShape(CLOSE);
//eye
noStroke();
fill(61, 60, 61);
ellipse(52, 49, 5, 5);
//tail
fill(177, 185, 157);
beginShape();
vertex(58, 71);
bezierVertex(62, 71, 68, 73, 72, 77);
bezierVertex(67, 78, 60, 77, 58, 71);
endShape(CLOSE);
fill(127, 136, 117);
beginShape();
vertex(58, 71);
bezierVertex(56, 77, 52, 80, 49, 80);
bezierVertex(45, 79, 47, 74, 58, 71);
endShape(CLOSE);
//spine
noFill();
stroke(138, 135, 138);
strokeWeight(2);
line(58, 56, 58, 71);
strokeWeight(2);
line(49, 59, 66, 58);
line(49, 65, 64, 65);
popStyle();
popMatrix();
break;
case 4: //Plum
pushMatrix();
pushStyle();
//head
noStroke();
fill(173, 73, 255);
beginShape();
vertex(49, 8);
bezierVertex(65, 9, 82, 15, 88, 31);
bezierVertex(91, 55, 80, 70, 62, 79);
bezierVertex(40, 83, 17, 74, 10, 48);
bezierVertex(11, 24, 27, 12, 48, 8);
endShape(CLOSE);
//body
fill(220, 123, 254, 150);
stroke(219, 81, 251, 70);
strokeWeight(8);
beginShape();
vertex(49, 3);
bezierVertex(63, 2, 80, 9, 89, 23);
bezierVertex(102, 43, 95, 83, 91, 108);
vertex(80, 92);
vertex(58, 119);
vertex(41, 106);
vertex(29, 117);
vertex(21, 104);
vertex(12, 115);
bezierVertex(7, 84, 2, 53, 6, 33);
bezierVertex(12, 16, 29, 6, 49, 3);
endShape(CLOSE);
//eyes
strokeWeight(2);
fill(255, 255, 255, 200);
beginShape();
vertex(57, 25);
vertex(80, 22);
bezierVertex(82, 30, 77, 36, 72, 36);
bezierVertex(63, 36, 61, 32, 57, 25);
endShape(CLOSE);
beginShape();
vertex(21, 29);
vertex(53, 26);
bezierVertex(54, 35, 49, 42, 40, 43);
bezierVertex(28, 42, 24, 36, 21, 29);
endShape(CLOSE);
//mouth
beginShape();
vertex(58, 46);
bezierVertex(62, 45, 68, 40, 73, 43);
bezierVertex(76, 50, 74, 56, 68, 61);
bezierVertex(61, 64, 52, 64, 46, 60);
bezierVertex(42, 55, 41, 50, 42, 47);
bezierVertex(46, 45, 49, 46, 57, 46);
endShape(CLOSE);
//teeth
line(56, 46, 53, 62);
line(63, 45, 70, 60);
//eyeballs
noStroke();
fill(173, 73, 254, 250);
arc(41, 27, 14, 15, -10, 181);
arc(68, 24, 12, 11, -14, 181);
//freckles
strokeWeight(2);
stroke(255, 255, 255, 150);
point(34, 48);
point(37, 55);
point(29, 52);
point(78, 42);
point(81, 49);
point(83, 40);
popStyle();
popMatrix();
break;
case 5: //Periwinkle
pushMatrix();
translate(-3, -5);
scale(1.05);
pushStyle();
//head
noStroke();
fill(173, 73, 255, 150);
beginShape();
vertex(48, 5);
bezierVertex(64, 6, 78, 13, 88, 24);
bezierVertex(94, 36, 96, 48, 96, 58);
vertex(90, 55);
vertex(89, 63);
vertex(75, 41);
vertex(68, 53);
vertex(53, 37);
vertex(46, 52);
vertex(36, 43);
vertex(28, 56);
vertex(20, 44);
vertex(6, 62);
bezierVertex(5, 48, 5, 33, 11, 22);
bezierVertex(19, 12, 32, 6, 48, 5);
endShape(CLOSE);
//body
fill(220, 123, 254, 150);
stroke(219, 81, 251, 70);
strokeWeight(8);
beginShape();
vertex(45, 15);
bezierVertex(59, 13, 75, 24, 83, 42);
bezierVertex(87, 65, 89, 89, 91, 105);
vertex(83, 101);
vertex(75, 109);
vertex(67, 103);
vertex(58, 109);
vertex(51, 104);
vertex(44, 112);
vertex(37, 100);
vertex(25, 109);
vertex(18, 98);
vertex(10, 103);
bezierVertex(11, 83, 10, 60, 10, 44);
bezierVertex(16, 27, 29, 18, 45, 15);
endShape(CLOSE);
//mouth
strokeWeight(2);
fill(255, 255, 255, 200);
beginShape();
vertex(48, 54);
bezierVertex(55, 54, 61, 57, 61, 64);
bezierVertex(59, 69, 49, 72, 39, 72);
bezierVertex(33, 68, 31, 59, 31, 53);
bezierVertex(37, 50, 40, 50, 48, 54);
endShape(CLOSE);
//tounge
noStroke();
fill(173, 73, 255, 100);
beginShape();
vertex(32, 60);
bezierVertex(35, 54, 39, 57, 44, 59);
bezierVertex(46, 60, 50, 66, 52, 70);
bezierVertex(48, 71, 42, 72, 38, 71);
bezierVertex(33, 66, 33, 65, 33, 62);
endShape(CLOSE);
//freckles
strokeWeight(2);
stroke(255, 255, 255, 150);
point(21, 53);
point(17, 57);
point(25, 59);
point(70, 56);
point(75, 49);
point(78, 54);
popStyle();
popMatrix();
break;
case 6: //Iris
pushMatrix();
translate(-2, -3);
scale(1.05);
pushStyle();
//head
noStroke();
fill(173, 73, 255, 150);
beginShape();
vertex(50, 9);
bezierVertex(63, 9, 81, 17, 88, 32);
bezierVertex(92, 55, 81, 74, 65, 81);
bezierVertex(44, 85, 26, 80, 17, 68);
bezierVertex(10, 52, 9, 36, 15, 24);
bezierVertex(25, 14, 36, 12, 50, 9);
endShape(CLOSE);
//body
fill(220, 123, 254, 150);
stroke(219, 81, 251, 70);
strokeWeight(8);
beginShape();
vertex(48, 4);
bezierVertex(66, 4, 85, 12, 92, 26);
bezierVertex(98, 44, 98, 68, 91, 88);
vertex(77, 116);
vertex(69, 104);
vertex(59, 118);
vertex(43, 104);
vertex(28, 115);
bezierVertex(15, 89, 9, 71, 6, 51);
bezierVertex(6, 36, 8, 24, 17, 16);
bezierVertex(28, 8, 36, 5, 48, 4);
endShape(CLOSE);
//eye
strokeWeight(2);
fill(255, 255, 255, 200);
ellipse(57, 39, 40, 40);
fill(173, 73, 255, 200);
stroke(219, 81, 251, 70);
ellipse(58, 39, 20, 20);
noStroke();
fill(255, 255, 255, 200);
ellipse(54, 36, 6, 6);
//mouth
noFill();
stroke(255, 255, 255, 200);
arc(59, 62, 18, 16, -4, 174);
//headband
noStroke();
fill(173, 73, 255, 200);
beginShape();
vertex(7, 24);
bezierVertex(34, 17, 68, 12, 87, 15);
vertex(94, 26);
bezierVertex(56, 26, 21, 31, 4, 36);
endShape(CLOSE);
popStyle();
popMatrix();
break;
case 7: //Mulberry
pushMatrix();
pushStyle();
//head
noStroke();
fill(173, 73, 255, 150);
beginShape();
vertex(38, 12);
bezierVertex(52, 11, 66, 13, 74, 17);
bezierVertex(78, 20, 80, 25, 78, 30);
bezierVertex(77, 40, 71, 56, 64, 64);
bezierVertex(55, 71, 40, 73, 21, 67);
bezierVertex(8, 59, 6, 44, 9, 31);
bezierVertex(14, 19, 27, 15, 36, 12);
endShape(CLOSE);
//body
fill(220, 123, 254, 150);
stroke(219, 81, 251, 70);
strokeWeight(8);
beginShape();
vertex(96, 14);
vertex(79, 39);
bezierVertex(91, 57, 100, 90, 98, 112);
vertex(74, 89);
vertex(61, 116);
vertex(36, 96);
vertex(13, 115);
bezierVertex(4, 92, 2, 73, 1, 48);
bezierVertex(3, 31, 6, 13, 26, 7);
bezierVertex(45, 1, 71, 4, 96, 14);
endShape(CLOSE);
//eyes
strokeWeight(2);
fill(255, 255, 255, 200);
ellipse(31, 28, 26, 26);
ellipse(56, 21, 21, 21);
//eyeballs
noStroke();
fill(173, 73, 254, 250);
ellipse(33, 27, 14, 14);
ellipse(54, 21, 11, 11);
//nose
ellipse(92, 14, 14, 14);
//tounge
beginShape();
vertex(32, 48);
bezierVertex(36, 52, 41, 53, 48, 55);
bezierVertex(46, 64, 44, 69, 36, 70);
bezierVertex(28, 68, 26, 60, 30, 48);
endShape(CLOSE);
//mouth
noFill();
strokeWeight(2);
stroke(173, 73, 254, 250);
bezier(28, 46, 32, 49, 49, 57, 54, 54);
popStyle();
popMatrix();
break;
}
};
};
var Spirit = function(config) {
this.headColor = config.headColor;
this.bodyColor = config.bodyColor;
this.bodyStroke = config.bodyStroke;
this.draw = function() {
pushStyle();
noStroke();
fill(173, 73, 255, 150);
fill(this.headColor);
ellipse(40, 79, 70, 55);
fill(220, 123, 254, 150);
fill(this.bodyColor);
stroke(219, 81, 251, 70);
stroke(this.bodyStroke);
strokeWeight(8);
beginShape();
vertex(42, 35);
bezierVertex(56, 48, 61, 48, 75, 65);
bezierVertex(78, 74, 78, 88, 71, 97);
bezierVertex(68, 103, 56, 104, 52, 107);
bezierVertex(34, 107, 16, 105, 12, 100);
bezierVertex(3, 89, 1, 76, 12, 58);
bezierVertex(17, 51, 36, 41, 42, 35);
endShape(CLOSE);
n.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0