キャラクターを動かしながらカーソルを動かしたい、などの場合、23行目や25行目のように長時間のVSYNC(WAIT)を使ってしまうと、そこで動きが止まってしまうので希望通りの動作にならないと思います。 なので基本全ての処理を平行して動くように工夫する必要があります。そうするとメインループの中は基本的にはVSYNC(1/60)のみになって、それ以外でVSYNCやWAITで止めることはほとんどしません。(処理が一時的に止まっても問題ない時を除いて) おそらく今までボタンの処理がうまくいかないと感じているのはその辺が関係あるんじゃないかと思います。