SDL SDLの導入について
環境
・Windows 10
・Visual Studio 2017 Community
・SDL 2.0.9
SDLとは
SDL (Simple DirectMedia Layer) は、Graphic, Sound系のAPIを提供するC言語のマルチプラットフォーム対応のライブラリ。
公式サイトは下記
Simple DirectMedia Layer - Homepage
Forumを見れば分かるのだが現在も使用しているユーザーはいる。
https://discourse.libsdl.org/
SDLを使用している書籍は下記等がある。
で、意外と導入で躓いたという人もいるかもしれないと感じたのでこの記事を書くに至った。
オンラインゲームを支える技術ではSDL1.2系が使用されている。
オンラインゲームを支える技術 ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)
- 作者: 中嶋謙互
- 出版社/メーカー: 技術評論社
- 発売日: 2011/03/24
- メディア: 単行本(ソフトカバー)
- 購入: 33人 クリック: 1,696回
- この商品を含むブログ (57件) を見る
ゲームプログラミングC++ではSDL2.0.3が使用されている。
- 作者: Sanjay Madhav,今給黎隆,吉川邦夫
- 出版社/メーカー: 翔泳社
- 発売日: 2018/12/05
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
SDLの導入
まずは下記よりDownloadを行う。
もしリンクが切れていたらブログトップの公式サイトのリンクからDownloadページにいってください。
Simple DirectMedia Layer - SDL version 2.0.9 (stable)
今回はDevelopment LibrariesのVC++を使用する。
1. コンソールアプリケーションを新規に作成
適当に空のプロジェクトで良い
2. ダウンロードしたファイルを適当な場所(Solution\External\SDL とか)に解凍
3. SDLのインクルードディレクトリの指定。
構成プロパティ/C/C++/全般/追加のインクルードディレクトリ
4. 追加のライブラリディレクトリの指定。
リンカー/全般/追加のライブラリディレクトリ
5. 追加の依存ファイルの指定。
リンカー/入力/追加の依存ファイル
SDL.libとSDLmain.libを追加
6. DLLをビルド時にコピー
ビルドイベント/ビルド後のイベント/コマンドライン
xcopy "(SDLへのパス)\*.dll" "$(OutDir)" /i /s /y を入力
ひとまずここまでで動かすための前準備が完了。
SDLを使用する際の注意点
まず、SDLを使用する際に下記の記述をするとエラーになってしまいます。
#include "SDL.h" int main() { SDL_Init(SDL_INIT_EVERYTHING); // メイン処理 SDL_Quit(); return 0; }
エラーメッセージを見てみると
LNK2019 未解決の外部シンボル _SDL_main が関数 _main_getcmdline で参照されました。
と出てきます。
これはSDL_main.h内でmainでdefineが定義されているからです。
#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) #define main SDL_main #endif
また、SDL_main.h内にはメイン関数は次のように定義してくださいと書かれています。
int main(int argc, char *argv[])
そのため、SDLを使用する際には引数付きのメイン関数を定義する必要があります。
void main() // NG! int main() // NG! int main(int argc, char* argv[]) // OK int main(int argc, char** argv) // OK
#include "SDL.h" int main(int argc, char** argv) { (void)argc; (void)argv; SDL_Init(SDL_INIT_EVERYTHING); // メイン処理 SDL_Quit(); return 0; }
ひとまずWindow, Rendererを作成してみるとこんな感じになります。
DirectXやOpenGLに比べるとすごく簡単なので、C++でとりあえずゲームを作ってみようかなという人は挑戦してみてください。