NimでSDL2 ① 準備とウィンドウ表示


はじめに

NimでSDL2を使用する方法を書いていきます。
なるべく機能毎にシンプルにかければ良いなと思ってます。

NimでSDL2と言ったら以下が有名なので、こちらも参考にすると良いすね。
SDL2を使い、Nimで2Dのプラットフォーム・ゲームを書く

SDL2のインストール

SDL2を使うのでまずはSDL2をインストールする。
Macだとこんな感じ。(他のプラットフォームの方は適宜ググってくださいー)

# とりあえず色々突っ込んでおく
$ brew install sdl2{,_gfx,_image,_mixer,_net,_ttf}

NimのSDL2ライブラリのインストール

SDL2のラッパー。普通にnimbleでインストール

$ nimble install sdl2

リファレンス

困ったらここで調べればOK
SDL 2.0 日本語リファレンスマニュアル

とりあえずウィンドウを表示

# sdl2をimport、osはsleepを使うので
import sdl2, os

# メイン関数
proc main() =
  # SDL2初期化
  if not sdl2.init(0): # まずはサブシステムなし
    raise Exception.newException("[ERROR] init SDL2: " & $getError())
  # SDL2クリーンアップ処理(deferで関数終了時に実行)
  defer: sdl2.quit()
  # Window作成
  let window = createWindow(title = "SDL2 Window Sample", # Windowのタイトル
                            x = SDL_WINDOWPOS_CENTERED, # Windowの位置(真ん中)
                            y = SDL_WINDOWPOS_CENTERED, # Windowの位置(真ん中)
                            w = 640, # Windowの幅
                            h = 480, # Windowの高さ
                            flags = SDL_WINDOW_SHOWN) # Windowフラグ*1
  # Window作成エラーチェック
  if window.isNil:
    raise Exception.newException("[ERROR] createWindow: " & $getError())
  # Windowsクリーンアップ処理
  defer: window.destroy
  # 終了フラグ
  var done = false
  # メインループ
  while not done: # 終了フラグが立つまで実行
    # イベント格納変数
    var event = defaultEvent
    # 全てのイベントを処理
    while pollEvent(event):
      case event.kind:
      of QuitEvent: # 終了イベントの場合
        done = true # 終了フラグを立てる
      else:
        discard
    # CPUを使い切らないようにちょっと(0.1秒)待つ(とりあえず実装)
    sleep(100)

# メイン関数実行
main()

Windowフラグに関しては以下を参照
SDL_WindowFlags ウィンドウの状態の列挙体

実行結果

次は?

画像とか表示していきたいですね。

以上〜。