日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

ESC を押したら終了するようにする(イベントハンドリングの触り)

arcade-clj シリーズ その 2。シリーズ全体の目次はこちら

元記事での追加機能

  1. エスケープかxが押されたら終了するように変更する

以上。x は play-clj では特に何もしなくても既に終了するようになってるので割愛。 また、元記事ではライフタイムについても言及があるが Rust 特有の話なのでこれも割愛。

イベントハンドリング

元記事はメインループ回してポーリングでのイベントハンドリングから実装してるんだけど、 play-clj は defscreen からしてイベントドリブンな書き方を求めてるので 最初からイベントドリブンでやる事にする。

と言うか自分の最初の記事で 3 秒経ったら終了する機能もイベントドリブンで既に書いてたりする。

一応付け加えておくと、今回で 3 秒経ったら自動終了するコードは削除する。

:on-keydown

play-clj の defscreen の docを見ると キー押下時イベントは既に存在してるのでここに ESC が押されたら終了するようにすればいいのは 簡単に判断が付く。

変更した defscreen はこちら。

(defscreen main-screen
  :on-show
  (fn [screen entities]
    (update! screen :renderer (stage))
    entities)

  :on-key-down
  (fn [screen entities]
    (condp = (:key screen)
      (key-code :escape) (app! :exit)))
  
  :on-render
  (fn [screen entities]
    (clear!)
    (render! screen entities)))

ええと、すいません、元記事的に追加した機能これだけだったんでこれで終わりです。 雰囲気で分かると思うけど一応補足すると、key-code に渡せるキーワード一覧も やはりplay-clj の key-code の docにあります。

github スナップショット

今回の記事終了時点のソースは以下から取得可能。

Release v0.2.0 · shinmuro/arcade-clj · GitHub