Flashlight with soft edge
back
Source
/* @pjs preload="player.png"; */
PImage player, circle;
PImage lightBitmap;
PGraphics buffer;
int LIGHT_RADIUS = 100;
int NUMBER_OF_PEOPLE = 20;
PVector[] people = new PVector[NUMBER_OF_PEOPLE];
// Setup the example
void setup(){
size(640, 480);
imageMode(CENTER);
player = loadImage("player.png");
lightBitmap = createImage(width, height, RGB);
buffer = createGraphics(width, height, JAVA2D);
for(int i = 0; i < people.length; i++){
people[i] = new PVector(random(100, width-100), random(100, height-100));
}
// Create circle image once, BLUR takes too long to do every frame.
createBlurredCircle();
}
void createBlurredCircle(){
PGraphics pg = createGraphics((int)(LIGHT_RADIUS * 2),(int)(LIGHT_RADIUS * 2),JAVA2D);
pg.beginDraw();
pg.background(0,0,0,0);
pg.fill(255);
pg.noStroke();
pg.ellipse(LIGHT_RADIUS,LIGHT_RADIUS,LIGHT_RADIUS * 1.5, LIGHT_RADIUS * 1.5);
pg.filter(BLUR, 5);
pg.endDraw();
circle = pg.get();
}
// The draw() method is called every frame
void draw(){
background(#4488cc);
PVector light = new PVector(mouseX, mouseY);
for(PVector person : people){
image(player, person.x, person.y);
}
buffer.beginDraw();
buffer.background(100);
buffer.fill(255);
buffer.noStroke();
buffer.imageMode(CENTER);
buffer.image(circle, light.x, light.y);
buffer.endDraw();
lightBitmap = buffer.get(0, 0, buffer.width, buffer.height);
blend(lightBitmap, 0, 0, width, height, 0, 0, width, height, MULTIPLY);
text((int)frameRate + " FPS", 20, 20);
}