Avoid rect.union (which creates new Rectangles each time it's called) and adjust the hitbox so that it's accurate on the first frame.