はじめに
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 ウィンドウの状態の列挙体
実行結果
次は?
画像とか表示していきたいですね。
以上〜。