This example was inspiration to me, firstly because it has eyes that
follow the mouse, a very important part of what my mouse toy is going to
be. It also has a monster element to it which is interesting as it is
not just a thing following the mouse, it has a character.I want to create a monster with interactive eyes and other potentially interactive functions. He/She will have a cute appeal that makes you want to cuddle it like the claw aliens from toy story.
//The following is not my work, it is an example that I have taken inspiration //from./** * Monster Dance |
* |
* Assignment: |
* Course: Interactive Digital Mdedia |
* Author: David Langly |
* Date: |
* |
* Description: Group of monsters dancing to the beat |
* of the music. |
*/ |
Monster m1; |
Monster m2; |
Monster m3; |
Monster m4; |
void setup() { |
size(500,500); |
strokeWeight(3); |
|
m1 = new Monster(150, 50); |
m2 = new Monster(40, 300); |
m3 = new Monster(300, 250); |
m4 = new Monster(350, 100); |
} |
void draw() { |
background(244,38,59); |
|
// Update each monster's pupils to follow cursor. |
m1.update(mouseX, mouseY); |
m2.update(mouseX, mouseY); |
m3.update(mouseX, mouseY); |
m4.update(mouseX, mouseY); |
|
// Display each monster with updated pupil position. |
m1.display(); |
m2.display(); |
m3.display(); |
m4.display(); |
} |
void mousePressed() { |
m1.mousePressed(); |
m2.mousePressed(); |
m3.mousePressed(); |
m4.mousePressed(); |
} |
void mouseDragged() { |
m1.mouseDragged(); |
m2.mouseDragged(); |
m3.mouseDragged(); |
m4.mouseDragged(); |
} |
void mouseReleased() { |
m1.mouseReleased(); |
m2.mouseReleased(); |
m3.mouseReleased(); |
m4.mouseReleased(); |
} |
/** |
* Monster. |
* |
* This class defines the blueprint for creating a monster |
* with a triangular head and two bulging eyes. The monster |
* is cool because its bulging eyes follow the mouse cursor |
* and grow with time. Moreover, the position of the monster |
* can be changed by clicking near the monster's eye and |
* dragging with the mouse. The functionality to move the |
* monster was implemented based on the Mouse Functions |
* example application bundled with Processing. |
*/ |
class Monster |
{ |
float monsterX; |
float monsterY; |
Eye leye; |
Eye reye; |
|
boolean bover = false; |
boolean locked = false; |
float bdifx = 0.0; |
float bdify = 0.0; |
|
Monster(int x, int y) { |
monsterX = x; |
monsterY = y; |
leye = new Eye(50, 50); |
reye = new Eye(150, 50); |
} |
|
void update(int mx, int my) { |
leye.update(mx-monsterX, my-monsterY); |
reye.update(mx-monsterX, my-monsterY); |
|
|
if (isInside(mx, my)) |
{ |
bover = true; |
} |
else |
{ |
bover = false; |
} |
} |
|
boolean isInside(int mx, int my) { |
if (leye.isInside(mx-monsterX, my-monsterY)) |
{ |
return true; |
} |
if (reye.isInside(mx-monsterX, my-monsterY)) |
{ |
return true; |
} |
return false; |
} |
|
void mousePressed() { |
if (bover) |
{ |
locked = true; |
} |
else |
{ |
locked = false; |
} |
|
bdifx = mouseX-monsterX; |
bdify = mouseY-monsterY; |
} |
|
void mouseDragged() { |
if (locked) |
{ |
monsterX = mouseX-bdifx; |
monsterY = mouseY-bdify; |
} |
} |
|
void mouseReleased() { |
locked = false; |
} |
|
void display() { |
pushMatrix(); |
translate(monsterX, monsterY); |
|
// draw all parts of the monster that is |
// static, i.e. everything apart from the |
// eye. make sure all coordinates are |
// relative to the current location of |
// the monster. |
stroke(0); |
fill(230, 201, 42); |
triangle(0, 0, 200, 0, 100, 150); |
|
leye.display(); |
reye.display(); |
|
popMatrix(); |
} |
} |
/** |
* Eye. |
* |
* This class defines the blueprint for diplaying an eye whose |
* pupil follows the position of the mouse cursor. The original |
* idea and calculations were taken from the example application |
* "Arctangent" bundled with the Processing application. |
* |
* The eye increases and decreases in size automatically as a |
* function of time. The initial size of an eye as well as the |
* rate at which the eye grows are both determined by using a |
* random number generator. |
*/ |
class Eye |
{ |
final static int MAX_EYE_SIZE = 100; |
final static int MIN_EYE_SIZE = 20; |
final static float MAX_EYE_VELOCITY = 0.2; |
final static float MIN_EYE_VELOCITY = -0.2; |
|
int ex, ey; |
float size; |
float velocity; |
float angle = 0.0; |
|
Eye(int x, int y) { |
ex = x; |
ey = y; |
size = random(MIN_EYE_SIZE, MAX_EYE_SIZE); |
velocity = random(MIN_EYE_VELOCITY, MAX_EYE_VELOCITY); |
} |
|
boolean isInside(float mx, float my) { |
float distance = sqrt(sq(ex - mx) + sq(ey - my)); |
if (distance <= size) |
{ |
return true; |
} |
else |
{ |
return false; |
} |
} |
|
void update(float mx, float my) { |
angle = atan2(my-ey, mx-ex); |
size += velocity; |
if (size > MAX_EYE_SIZE) { |
velocity = -velocity; |
} |
if (size < MIN_EYE_SIZE) { |
velocity = -velocity; |
} |
} |
|
void display() { |
pushMatrix(); |
translate(ex, ey); |
fill(255); |
stroke(0); |
ellipse(0, 0, size, size); |
rotate(angle); |
fill(153); |
ellipse(size/4, 0, size/2, size/2); |
popMatrix(); |
} |
} /////////////////////End of example
No comments:
Post a Comment