さくらんぼのlambda日記

lambdaちっくなことからゲーム開発までいろいろ書きます。

lispbuilder-sdlでウィンドウ表示

大体lispbuilder-sdlの環境構築は前回と前々回書いてきました。
なんとなく、今回は実際にウィンドウ表示などでもしてみようかと思います。
lispbuilder-sdlウィンドウ表示するための最小限のコードは以下のような感じになります。

  (sdl:with-init ()
    (sdl:window 640 480 :title-caption "Window Test")

    (sdl:with-events ()
      (:quit-event () t)
      (:key-down-event ()
       (sdl:push-quit-event))
      (:idle ()
       (sdl:clear-display sdl:*black*)
       (sdl:update-display))))

短くていい感じですね。

実行すると

f:id:sakura-1:20110117193846p:image

こんな感じでウィンドウが表示されます。

コードの解説

with-init,with-eventsはマクロです。こういったマクロを用意してくれているので、無駄なコードを余り記述しないでゲームを作成していくことができます。

  • with-init

これはsdlの初期化を行ってくれるマクロです。このwith-initで囲われた部分から出るときにsdlの後始末も実行してくれます。普通のCommon Lispにあるwith-系マクロと同じ系統のものですね。

  • with-events

このマクロは便利ですね。このwith-eventsで囲われた部分が無限ループとして展開されます。ループの間にキーボード入力、終了イベントといったイベント発生時に、イベントに対応するフォームを実行するマクロです。例えば、キーボードが押された場合には:key-down-eventのフォーム、終了イベントでは:quit-eventといったよう各種イベントに対応するフォームが実行されます。:idleだけ若干扱いが違って毎フレームの描画や更新といったことを実行する場合のフォームとなっています。

この:idleで始まっている部分にゲーム本体を記述していくことでゲームの開発を進めることができます。

ね。簡単でしょ。

じゃー。