OptionaldeadOptionalonPer-poll callback. Mirrors JoystickOptions.onChange from touch:
forward = -axisY (push up = positive), strafe = +axisX. Fires every
tick the stick is outside the deadzone, and once with (0, 0) when it
crosses back inside.
Stick magnitude below this fraction reads as zero. Default 0.15.