Ok, thanks for the refresher on how Python manages member variables or data attributes. I haven't done a lot of python OOP yet.
So it sounds like scene's internal variables are in the same namespace as the variables we create to perform our animation, and that makes sense now that I've thought about it. I don't know why it surprised me so much. I did read a fair amount of documentation before writing my code, I guess it would have been nice if there had been a mention of avoiding scene's internal variables when introducing scene.
For the benefit of anyone running across this after making the same mistakes here is the fixed version:
from scene import * class MyScene (Scene): # note any variables declared here are class variables (shared by all copies of the class # Also avoid Scene's internal variables like t, dt, etc. setup(self): self.my_t = 0.1 #this is an instance variable, each copy of the class would get it's own def draw(self): print(self.my_t) run(MyScene())
This one had me going for a day or so. I wrote an animation with scene and it drew the wrong thing. I finally traced it down to a variable of mine getting changed outside of my code. I'm guessing I overrode an internal variable accidentally and scene was changing the value.
Simple example to demonstrate. Run it for a second, stop it, see in the console that the variable gets constantly changed.
from scene import * class MyScene (Scene): t = 0.01 def draw(self): print(self.t) run(MyScene())
Is there a better place for variables that persist between draw() calls?