[caption id=”attachment_77” align=”aligncenter” width=”300”] trails in processing.py[/caption]
in this post, we’ll explain how to add trails using an oop approach.
a trail is basically objects that appear where the primary objects passed
in nature, trails are made by particles of the primary object but in programming, one simple approach is to draw other shapes albeit more small the full code =============
there is the full processing.py code :
# github.com/abdur-rahmaanj
class MouseTrail:
def \_\_init\_\_(self):
self.history = []
def update(self):
self.history.append([mouseX, mouseY])
if len(self.history) > 200:
self.history.pop(0)
def display_mouse(self):
fill(100, 100, 100, 100)
ellipse(mouseX, mouseY, 50, 50)
def display_trail(self):
beginShape()
stroke(0)
strokeWeight(1)
noFill()
for v in self.history:
vertex(v[0], v[1])
endShape()
def run(self):
self.update()
self.display_mouse()
self.display_trail()
trail = None
def **setup**():
global trail
trail = MouseTrail()
size(500, 500)
def **draw**():
global trail
background(255)
trail.run()
explanations
in the constructor,
self.history = []
is basically a simple list
we added to the list on each call of the update method. then if there are more than 200 elements in the list, we remove one element
self.history.append([mouseX, mouseY])
if len(self.history) > 200:
self.history.pop(0)
for the shapes, we just draw vertices (hey lines) joining all the points in the list
def display_trail(self):
beginShape()
stroke(0)
strokeWeight(1)
noFill()
for v in self.history:
vertex(v[0], v[1])
endShape()
finally the run method is included for convenience so that we need to only call one method !
def run(self):
self.update()
self.display_mouse()
self.display_trail()
in setup, we just define a new object
trail = MouseTrail()
then in draw we call the run method
trail.run()
conclusion
adding oop allows for much more flexibility than hardcoding it all !
here it is in action :
[video width=”500” height=”500” mp4=”https://www.pythonmembers.club/wp-content/uploads/2018/04/mouse_trail.mp4”][/video]