Fixed issue #4 by moving the main animation loop to SmoothKeyListener; the API is now kind of gnarly as it requires callbacks inside of callbacks, but the characters moove smoothly when you hold the key down, stop moving if you release it, and if you change directions than the next direction you're holding is queued up to process as soon as the current animation finishes.