How do I hide the previous image frame
in
Core Library Questions
•
2 years ago
Hello all,
I've got a problem with PImages (I think).
I want to shoot an image through a point but I don't want to see the whole line.
In my application I see multiple images over eachother instead of only 1 or 2 and then deleting the previous one.
This is my code:
- import processing.video.*;
Capture cam;
color trackColor; - PFont myFont;
- //Variabele aan maken: true or false
boolean showkatvoer = true;
boolean starten = false;
boolean showscherm = false; - //PImage variabelen
PImage smileykat;
PImage catapult;
PImage diff;
PImage kattenvoer;
PImage spiegel;
PImage photo;
PImage smileyfinal; - // integers aanmaken met de beginwaarde voor setX, setY, a en b
int setX = 610;
int setY = 200;
int a;
int b = 440;
int savedTime;
int totalTime = 5000; - //Methode voor de setup
void setup() {
size(800, 600);
savedTime = millis();
cam = new Capture(this, width, height, 24);
trackColor = color(255, 0, 0); // gezochte kleur is rood
//images inladen
spiegel = createImage(width, height, RGB);
catapult = loadImage("Catapult.png");
kattenvoer = loadImage("kattenvoer.png");
smileykat = loadImage("smileykat.png");
smileyfinal = loadImage("katfinal.png"); - //Text dat verschijnt op het startscherm op x(160) en y(340)
myFont = createFont("Arial", 30);
textFont(myFont);
text ("SPACE BAR om te starten",160,340);
} - //Methode wanneer er op spatiebalk gedrukt het spel wordt gestart
void keyReleased(){
if(key == ' '){
starten = true;
}
} - void draw() {
if(starten == true){ - if (cam.available() == true) {
cam.read();
}
cam.loadPixels(); - // De cam spiegelen
for (int i = 0; i <cam.pixels.length; i++) {
spiegel.pixels[i] = cam.pixels[cam.width + (cam.width*(i/cam.width)) - 1 - i%cam.width];
}
spiegel.updatePixels();
image(spiegel, 0, 0); - // variabele van type float aangemaakt, waarin beste score (max. 50000) kan worden opgeslagen
float besteScore = 50000; - //integers met allebei de waarde 0 die later de x en y worden van het registratiepunt
int closestX = 0;
int closestY = 0; - for (int x = 0; x < spiegel.width; x ++ ) {
for (int y = 0; y < spiegel.height; y ++ ) {
int loc = x + y*spiegel.width;
// Kijken wat de kleur nu is
color currentColor = spiegel.pixels[loc]; - //de floats worden de currentColor of de trackColor
float r1 = red(currentColor);
float g1 = green(currentColor);
float b1 = blue(currentColor);
float r2 = red(trackColor);
float g2 = green(trackColor);
float b2 = blue(trackColor); - // Hierin vergelijken we de parameters van de huidige kleur met de parameters van de kleur die we aan het zoeken zijn en dan wordt de
afstand tussen deze parameters berekend
float d = dist(r1, g1, b1, r2, g2, b2); - if (d < besteScore) {
besteScore = d; //Als float d kleiner is dan besteScore, wordt deze de besteScore
closestX = x; //integer closestX wordt de nieuwe x
closestY = y; // integer closestY wordt de nieuwe y
}
}
} - //Als besteScore kleiner is dan 100, teken een cirkel op de nieuwe x en y en vul deze met de trackColor
if (besteScore < 100) {
fill(trackColor);
strokeWeight(2.0);
stroke(0);
ellipse(closestX, closestY, 16, 16);
} - //image kattenvoer plaatsen wanneer showkatvoer 'true' is op setX en setY
if(showkatvoer == true){
image(kattenvoer, setX, setY);
} - //Als showscherm 'true' is, laat de text zien op x(100) en y(100)
if(showscherm == true){
myFont = createFont("Arial", 30);
textFont(myFont);
text ("Goed gedaan, de kat heeft eten!", 100,100);
} - //Als de nieuwe x kleiner of gelijk aan 40 is,
// en de nieuwe y groter of gelijk aan 560
// dan wordt smileykat afgeschoten en verplaatst x+4 en y-4
if (closestX <= 40 && closestY >= 560){
int a;
int b = 440;
int passedTime = millis() - savedTime;
if (passedTime > totalTime) { - for(a=180; a<=800; a=a+4){
image(smileykat, a, b=b-4,30,30);
}
savedTime = millis();
}
} - //Als nieuwe x kleiner of gelijk aan 40 is,
//en de nieuwe y tussen de 520 en 559 is
// dan wordt de smileykat afgeschoten en verplaatst met x+4 en y-2
// en wanneer de x het punt bereikt tussen 610 t/m 702 en de y tussen 200 t/m 333
// dan wordt de boolean katvoer false en showscherm true
if (closestX <= 40 && closestY <= 559 && closestY >= 520){
int a=0;
int b = 440;
int passedTime = millis() - savedTime;
if (passedTime > totalTime) {
for(a=180; a<=620; a=a+4){
image(smileykat, a, b=b-2,30,30);
if((a>=610 && a<=702) && (b>=200 && b<=333)){
image(smileyfinal,460,140);
showkatvoer = false;
showscherm = true;
}
savedTime = millis();
}
}
} - // smileykat afschieten wanneer de nieuwe x kleiner of gelik aan 40 is
// en de nieuwe y tussen de 480 t/m 519 ligt
if (closestX <= 40 && closestY <= 519 && closestY >= 480){
int a;
int b = 440;
int passedTime = millis() - savedTime;
if (passedTime > totalTime) {
for(a=180; a<=800; a=a+4){
image(smileykat, a, b,30,30);
}
savedTime = millis();
}
} - //Teken de vierkantjes links onderin met een alpha van 80%
fill(255, 80);
rect(0, 480, 40, 40);
rect(0, 520, 40, 40);
rect(0, 560, 40, 40);
rect(150, 480, 30, 120); - //Plaats de image catapult
image(catapult, 120, 410);
}
} - //Methode om kleur op te slaan waar de muis heeft geklikt
// en deze plaatsen in de variabele trackColor
void mousePressed() {
int loc = mouseX + mouseY*cam.width;
trackColor = cam.pixels[loc];
}
1