I am having an issue implementing Daniel Shiffman's awesome dragging example into my sketch. I have used it before and it is great, however I am attempting to use it with some "fancy" for looping to apply it to multiple objects(in this case text) but to no avail. Everything works correctly except for the objects don't drag when they should. Logically, this makes since because the offsetX and offsetY properties in the Line
class continue to update thus forcing the object to remain stationary. I am sure that there is a solution but I can't figure it out. Perhaps I have been staring at it for too long. I really appreciate the help!
String[] doc; //array of Strings from each text documents line
int tSize; //text size
float easing; //easing
int boundaryOverlap; //value for words to overlap edges by
PFont font; //font
Lines lines;
boolean clicked = false;
void setup(){
size(displayWidth/2,displayHeight);
background(255);
fill(0);
boundaryOverlap = 20; //value for words to overlap edges by
tSize = 32; //text size
//loads and formats text
doc = loadStrings("text.txt");
font = loadFont("Times-Roman-48.vlw");
textFont(font, tSize);
//lines object
lines = new Lines(doc);
//populate xAddition and yAddition arrays
lines.populateArrays();
}
void draw(){
background(255);
fill(0);
//loops through each line in .txt
for(int i = 0; i <= doc.length-1; i++){
if(clicked) lines.clicked(i);
lines.move(i, clicked); //update doc[i] positions //deletes
lines.display(i); //draws text for each line of text in text.txt
}
}
void mousePressed(){
clicked = true;
}
void mouseReleased(){
clicked = false;
lines.dragging = false;
}
Here is the line class:
class Lines{
//class properties
float[] x; //array holding random values to be added to x for placement
float[] y; //array holding random values to be added to y for placement
float offsetX;
float offsetY;
String[] doc;
boolean dragging = false; //boolean for dragging
//construct
Lines(String[] tempDoc){
doc = tempDoc;
}
//fills x and y arrays
void populateArrays(){
x = new float[doc.length];
y = new float[doc.length];
//populates x and y arrays
for(int i = 0; i <= doc.length-1; i++){
x[i] = int(random(0-boundaryOverlap, width-boundaryOverlap));
y[i] = int(random(0, height-boundaryOverlap));
}
}
//draws text
void display(int i){
text(doc[i], x[i], y[i]); //draw text
//if(addition[i] != null) text(addition[i], x[i], y[i]+20);
}
void clicked(int i){
if(mouseX > x[i] &&
mouseX < x[i]+textWidth(doc[i]) &&
mouseY < y[i] &&
mouseY > y[i]-tSize){
dragging = true;
offsetX = x[i] - mouseX;
offsetY = y[i] - mouseY;
}
}
//updates text positions
void move(int i, boolean clicked){
//if mouseOver text hover gray
if( mouseX > x[i] &&
mouseX < x[i]+textWidth(doc[i]) &&
mouseY < y[i] &&
mouseY > y[i]-tSize){
fill(100); //gray text fill
if(dragging){
x[i] = mouseX + offsetX;
y[i] = mouseY + offsetY;
}
}
else{
fill(0); //if not text not mouseOver fill is black
dragging = false;
}
}
//delete
void delete(int i){
//if "delete" is pressed
if (keyPressed){
if(key == 8){
doc[i] = ""; // doc[line String that is being hovered over] is replaced with null
keyCode = 1;
}
}
}
}