Если игрок имеет возможность пересекаться с несколькими объектами имеет смысл сохранить объекты в списке и тогда можно будет точно определить когда игрок начал взаимодействие с каким либо обьектом
class Player(object):
def __init__(self):
self.colliders = list()
def collide(self, xvel, yvel, plantlist):
for plant in plantlist:
collide = collide_rect(self, plant)
if collide and plant in self.colliders:
# Выполняется каждый раз пока игрок пересечен с растением
pass
if collide and not plant in self.colliders:
self.colliders.append(plant)
# Выполняется только один раз при пересечении с растением
if not collide and plant in self.colliders:
self.colliders.remove(plant)
# Выполняется только один раз когда игрок перестает пересекаться с растением