Use requestAnimationFrame but limit input handling to once every 33ms to keep him from running off the side of the screen like a mad man