We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Howdy,
I am trying to understand how to use variables throughout a sketch and am having a slight bit of trouble understanding it. I would like to use the mouseColor and noSteps throughout my sketch. Here's what I have:
float mouseColor = 255;
float noSteps = 20;
void setup(){
background(0);
size(800,800);
colorMode(HSB);
float noSteps = 10;
}
void drawStar(float steps){
strokeWeight(1);
smooth();
int hWidth = width/2;
int hHeight = height/2;
line(0,hHeight,width,hHeight);
line(hWidth,0,hWidth,height);
for (int i = 0; i < hWidth; i += steps) { //Q1
line(hWidth, i, hWidth+i, hHeight);
}
for (int i = 0; i < hWidth; i += steps){ //Q2
line(hWidth,i,hWidth-i,hHeight);
}
for (int i = 0; i < hWidth; i += steps){ // Q3
line(hWidth,height-i,hWidth+i,hHeight);
}
for (int i = 0; i < hWidth; i += steps){ // Q4
line(hWidth,height-i,hWidth-i,hHeight);
}
}
void drawBorder(float steps){
int hWidth = width/2;
int hHeight = height/2;
for (int i = 0; i < hWidth; i += steps){ // Q1
line(hWidth+i, 0,width, i);
}
for (int i = 0; i < hWidth; i += steps){ // Q2
line(hWidth-i, 0,0, i);
}
for (int i = 0; i < hWidth; i += steps){ // Q3
line(0, hHeight+i,i,height);
}
for (int i = 0; i < hWidth; i += steps){ // Q4
line(hWidth+i, height,height, height-i);
}
}
void helpText(){
float mouseColor = map(mouseY,0,height,0,255);
String mousePos = str(mouseY);
text("MouseY, "+mousePos+", color "+mouseColor,50,50);
float noSteps = map(mouseX,0,width,10,30);
text(noSteps,50,80);
}
void draw(){
background(0);
helpText();
stroke(mouseColor,255,255);
drawStar(noSteps);
stroke(255-mouseColor,255,255);
drawBorder((30+1)-noSteps);
}
So, as it stands now, the mouseColor and noSteps stay at 255 and 20, as determined at the top (these are "global variables", yes?).
BUT - I want to determine them in my draw() loop - how can I do that? I have gotten it working if I move everything in the "helpText()" function to the draw() loop. But I would like to keep what's in draw() to a minimum, and use functions to help do so. Is this possible? Does my question make sense?
Another question, which is the same issue pretty much, is how can I code it so I don't have to set "hHeight" and "hWidth" in each function that uses them?
Thanks so much for any help, let me know if I can clarify anything!
Answers
You're redeclaring them as local variables everywhere! Thus overshadowing them! L-)
D'oh! I think I see. So, I can set them globally at the top, but remove the 'float' or 'int' part before resetting them to something?
Be right back, will try that.
Edit: okay, I got it working with the Text part, but can't figure out how to declare the hHeight and hWidth globally. If I place in Setup, I get the "no variable named hHeight" error. I place under Setup, not in a function, and then nothing is drawn...
Ok I got it working, but my question now is: Why do I have to place hWidth and hHeight in the draw() loop? If I place them anywhere else, none of the functions can read the values.
Here's the code with the update - does this all look correct?
hWidth = width/2; // why can't I declare these anywhere else?
You can declare variables anywhere. But they become local to the scope where it happened!
Best place to initialize variables in within setup():
https://processing.org/reference/setup_.html
Hm I understand that part - if I remove those to lines from draw and place above (or below) setup, when I run the sketch, nothing appears (as if hHeight and hWidth are 0, I suppose). And I removed the initial 'blank' declaration at the very beginning.
But thanks for your help, it clarified the bigger issue/question I had!
Edit: I thought so too...but if I place int hWidth = width/2; int hHeight = height/2;
in Setup(), in the drawStar() function get the error "Cannot find anything named hHeight" when running.
Best practices:
Thanks for the note on size(). I put that first, and am still getting the error.
"Cannot find anything named 'hHeight'" - and highlights the 'line(0,hHeight,width,hHeight); ' part...
You're declaring both inside setup()! You're supposed to initialize them instead! [-(
AHA! Duuhhhh. I am suppose to declare them outside globally, but initialize them in Setup!
So, DECLARE variables I want to use throughout the sketch, and INITIALIZE those variables where necessary in the sketch.
Thanks so much for your help!!
That's it! Although notice that initialize refer to the 1st value assigned to a variable.
After that it's merely called assignment afterwards. (*)
Most of the time, we can both declare and initialize a variable in the same statement.
However in Processing, both width & height only get their values after size()!
Another 1 in the same vein is sketchPath! :|
If you're still here - I am trying to look up some best practices for Processing, but Googling around is a bit tricky. Do you have any sites or queries I should look up?
(Or, what key words to include to make sure the Processing computer code/software pops up ...not generic best practices for processing invoices :P)
It's hard to search for something called "Processing", sorry! :(
Don't forget that Processing is a framework, whose main language is Java!
For alternative forums, you can try:
There are some tutorials in the Processing.org site too:
You might also try StaticVoidGames there are some nice tutorials and the site owner is a member of this forum.
Thanks GoToLoop and quark! :D