Skip to content

Instantly share code, notes, and snippets.

@arthurrump
Last active September 12, 2022 09:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arthurrump/3e2adec771be86fff0a0122f1b71e6c2 to your computer and use it in GitHub Desktop.
Save arthurrump/3e2adec771be86fff0a0122f1b71e6c2 to your computer and use it in GitHub Desktop.
Processing sketch met een box die je met de muis over het scherm kan slepen
// Sketch met een box die je met de muis over het scherm kan slepen
// Gebaseerd op https://processing.org/examples/mousefunctions.html
// Variabelen die we nodig hebben in dit programma:
// - x en y positie van de box
float boxX, boxY;
// - grootte van de box
int boxSize;
// - booleans die aangeven of
// - de muis op dit moment over de box hangt
// - de muis op dit moment de box vasthoudt (door te klikken)
boolean mouseOverBox, mouseLockedOnBox;
// - als de muis de box vasthoudt, op welke afstand van het midden
// van de box de muis zit (dat moeten we weten om de box weer op
// de juiste plek te zetten bij het slepen)
float lockedOffsetX, lockedOffsetY;
void setup() {
size(640, 360);
// Zet de box in het midden bij de start van het programma
boxX = width / 2;
boxY = height / 2;
boxSize = 75;
// Initialiseer de variabelen voor het slepen
mouseOverBox = false;
mouseLockedOnBox = false;
lockedOffsetX = 0.0;
lockedOffsetY = 0.0;
rectMode(RADIUS);
}
// De draw is heel simpel: we hoeven alleen de box te tekenen
// aan de hand van de variabelen die we hebben
void draw() {
background(0);
// Als de muis de box vasthoudt, maken we de box wit
if (mouseLockedOnBox) {
fill(#ffffff);
// Als de muis over de box zweeft, geven we de box een witte rand
// en tekenen we de box verder in het grijs
} else if (mouseOverBox) {
stroke(#ffffff);
strokeWeight(2);
fill(#dedede);
// Anders tekenen we de box zonder rand en in het grijs
} else {
strokeWeight(0);
fill(#dedede);
}
// Teken de box op de juiste positie
rect(boxX, boxY, boxSize, boxSize);
}
// Hier gebeurt het echt: met deze event handlers zorgen we ervoor
// dat je de box over het scherm kunt slepen
// Deze handler wordt uitgevoerd als de muis verplaatst wordt, en
// die kunnen we dus gebruiken om te zien of de muis nu over de box
// hangt
void mouseMoved() {
// Als de x positie van de muis groter is dan de linkerkant van de box
// en kleiner dan de rechterkant van de box
if (mouseX > boxX - boxSize && mouseX < boxX + boxSize
// en de y positie van de muis groter is dan de bovenkant van de box
// en kleiner is dan de onderkant van de box
&& mouseY > boxY - boxSize && mouseY < boxY + boxSize) {
// Dan is de muis op dit moment boven de box!
mouseOverBox = true;
} else {
// En anders niet
mouseOverBox = false;
}
}
// Deze handler wordt uitgevoerd als je de linkermuisknopt indrukt, die
// gebruiken we om de box vast te pakken
void mousePressed() {
// Als we boven de box zijn,
if (mouseOverBox) {
// dan kunnen we de box vastpakken
mouseLockedOnBox = true;
// We onthouden ook waar we de box vasthouden: als de offset 0 is,
// dan hebben we de box precies in het midden, maar we kunnen de box
// ook op een andere plek vastpakken. De offset is dan de afstand
// vanaf de muis tot aan het midden.
lockedOffsetX = mouseX - boxX;
lockedOffsetY = mouseY - boxY;
}
}
// Deze handler wordt uitgevoerd als we met de muis slepen, dus bewegen
// terwijl de muisknop is ingedrukt. Met deze handler bewegen we de box.
void mouseDragged() {
// We bewegen de box alleen als we de box vasthouden bij het slepen
// (en we dus de muisknop ingedrukt hebben terwijl we boven de box waren).
if (mouseLockedOnBox) {
// Dan is de nieuwe positie van de box de huidige positie van de muis,
// gecorigeerd voor het feit dat we de box niet in het midden hoeven te
// pakken door de offset.
boxX = mouseX - lockedOffsetX;
boxY = mouseY - lockedOffsetY;
}
}
// En als laatste: als we de muis loslaten,
void mouseReleased() {
// dan hebben we de box dus niet meer vast...
mouseLockedOnBox = false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment