スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OS別、SDL2.0導入方法まとめ

 ネットで探してもあまり情報がなかったので
SDL2.0及び、SDL2.0_mixer、SDL2.0_ttf、SDL2.0_image
の各OSにおける導入方法をメモ的に解説します、画像無しでも情報が無いよりは良いと思う。

 普段使ってるOS以外でコンパイルする方法はよく知らない人が多いと思いますが、自分もそうなのでわりと苦労しました。ようやくこれでゲーム開発に専念出来る。

●はじめに
SDL2.0は
デスクトップはWindows、Mac、Linux
タブレットはiOSとAndroidに対応しています

SDL公式はこちら
http://www.libsdl.org/
http://www.libsdl.org/projects/SDL_mixer/
http://www.libsdl.org/projects/SDL_ttf/
http://www.libsdl.org/projects/SDL_image/

main.cpp等のサンプルソースは以下のサイトを参考にしてください
http://nyaocat.hatenablog.jp/entry/2014/01/27/153145

■デスクトップ■
 同じOS向けに作成する場合でも、コマンドラインからコンパイルする方法と、IDEを使う方法があったり、
スタティックリンクとダイナミックリンクの方法等がありますが一種類の方法しか解説しません。

●Windows
各サイトからWindos版のDevelopment Librariesをダウンロードします
32bit版と64bit版があるので必要な方を使います。

SDL2_mixer-dev,SDL2_ttf-dev,SDL2_image-devの中にあるlibとincludeフォルダをSDL2-2.0.1の中にまとめます

Visual Studio Express 2013 for Windows Desktopを入手します
後ろにfor Windows Desktopとついていない方はWindowsStoreアプリ用なので間違えないで下さい。

 Visual Studioを起動して、上のファイルメニューから新しいプロジェクトを選択し、Win32アプリケーションを作成します
追加オプションは空のプロジェクトだけ変更します。

上のメニューからプロジェクト>プロジェクト名のプロパティを開きます
構成を全ての構成にして
構成プロパティのC/C++の追加のインクルードディレクトリにSDL2.0.1のincludeフォルダを追加
構成プロパティのリンカーの追加のライブラリディレクトリにSDL2.0.1のlib/x86(あるいはx64)を追加します

ソースファイルを追加します
上のサイトのサンプルに
#pragma comment(lib, "SDL2.lib")
#pragma comment(lib, "SDL2main.lib")
#pragma comment(lib, "SDL2_image.lib")
#pragma comment(lib, "SDL2_mixer.lib")
#pragma comment(lib, "SDL2_ttf.lib")
の5行を追加すればコンパイルが通ります

このままだと実行時エラーが起こるので、
生成されたexeファイルと同じディレクトリに先のlibフォルダ内にあるdllファイルを全てコピーします。

●MacOSX
各サイトからMac版のDevelopment Librariesをダウンロードします

Finderを開き、上部メニューの「移動」から「フォルダへ移動」を選び「/System」と入力します。
ライブラリフォルダを開き、Frameworksフォルダを開きます。
Frameworksフォルダに先ほどダウンロードした
「SDL2.framework」
「SDL2_image.framework」
「SDL2_mixer.framework」
「SDL2_ttf.framework」
の4つをコピーします。

Xcodeをインストールして起動します。
上部メニューの「File」の「New」から「Project」を選びます。
Command Line Toolのプロジェクトを作成します。TypeはC++にします

エクスプローラからプロジェクトを選びます

メインウィンドウにプロジェクトの設定が表示されるので、画面の上の方にある「Build Phases」を選択します

Link Binaly With Libraryesをクリックします
Add frameworks & libraries here にの中に先ほどの
「SDL2.framework」
「SDL2_image.framework」
「SDL2_mixer.framework」
「SDL2_ttf.framework」
を追加します。
ライブラリディレクトリからドラッグして追加するとエラーになるようです?のでダウンロードした方をドラッグして追加して下さい。

画面左側の「Sorce」のフォルダのmain.cppファイルを開き、上のサンプルコードをコピーして実行して下さい。

※注意
 解説しておいてなんですが、SDLのライセンスが変わったので、WindowsとMacもスタティックリンクした方が良いと思います。
実行ファイルと同じ所にファイルを起きたくないですし、.Frameworkは容量が大きくなります。

●Ubuntu
Linuxのディストリビューションは色々ありますが、とりあえずUbuntu13.10の場合。

公式サイトからダウンロードせずにコマンドラインから入手した方が楽です。

$ sudo apt-get install libsdl2-dev
$ sudo apt-get install libsdl2-image-dev
$ sudo apt-get install libsdl-ttf2.0-dev
$ sudo apt-get install libsdl2-mixer-de
これでインストールします

main.cppファイルを作成し先のサンプルをコピー。

main.cppの存在するカレントディレクトリに移動
$ c++ `sdl2-config --cflags --libs` main.cpp
$ ./main.out
で実行

$ sudo su しないとコンパイルエラーが出る事があるようです

■タブレット■
 iOSとandroid版はスタティックリンクする必要があるので、各サイトからSource Codeを入手して下さい。

●iOS
 iOSアプリの開発はmacでしか出来ません。

 1から設定するとややこしいので、サンプルプロジェクトを改造します
Xcodeを普段使っていないので、よく分からないため無駄な事をしているかもしれません

 SDL2_image/Xcode-iOSの中のxcodeprojを実行。
プロジェクトのHeader Search PathsにSDL2-2.01/includeを追加してビルドし、libSDL2_image.aを作成します

SDL2-2.01/Xcode/SDL
SDL2_mixer/Xcode-iOS
SDL2_ttf/Xcode-iOS
の中にあるxcodeprojについても同じ事をして

libSDL2_image.a
libSDL2_ttf.a
libSDL2_mixer.a
libSDL2.a
の4つを作成します

SDL2-2.01/Xcode-iOS/Test/TestiPhoneOS.xcodeprojを開きます

libSDL2_image.a
libSDL2_ttf.a
libSDL2_mixer.a
libSDL2.a
をTestiPhoneOSのLink Binary With Librariesに追加

このままだとc++のコードが通らないので
Build SettingsのApple LLVM 5.0 - Language - C++
の上2つを
GNU++11
libc++
に変更し
TestiPhoneOSのGeneralタブの設定のDeployment Targetを7.0にします

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/System/Library/Frameworks/
の中にある
MobileCoreServices.frameworkと
imageIO.framework
の2つをプロジェクトに追加します

これで、とりあえずシミュレータ上では動きます。
実機の方は開発者登録(有料)やらなんやらが必要なので試していません。

こちらのページも参考になります
http://onscripter.sourceforge.jp/ios/#SDK

●Android
android開発はWindowsでもMacでもUbuntuでも出来るようです

まずJavaとAndroidSDK、androidNDKの環境を構築します
下記サイトを参考にしてインストールしたりpath設定をして下さい
http://techfun.cc/techinf/setup/android/
http://dench.flatlib.jp/opengl/androidsdk

その後SDLを導入します
こちらが詳しいです
http://ggkuron.hatenablog.com/entry/2013/08/02/073940

 上記事の通り、eclipse上ではコードを編集する事なくコンパイルが出来ます。

 Windowsの場合、管理者権限が必要な所にandroid-projectを置くとコンパイル出来ないので注意。

 最後の方に書いてありますが、g++以外にclang3.3でもコンパイルが出来ます
NDK_TOOLCHAIN_VERSION=4.7

NDK_TOOLCHAIN_VERSION=clang
これでclangでコンパイルされるので、コンパイル時間が多少早くなります。
特に日本語の識別子を使っている場合は、clangでないとコンパイル出来ません。

iOSと違い、Androidはシミュレータだと動かない事があるので、ダメそうなら実機でデバッグしましょう。

SDL_imageなどの導入は結構ややこしいです。
まず先のチュートリアルを完了させます
jniフォルダ内に
SDL2_image
SDL2_mixer
SDL2_ttf
のSource版を解凍したフォルダをコピーします。
フォルダ名のバージョンの部分は消した方が分かりやすいです。

次にsrc内のAndroid.mkを修正
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include \
$(LOCAL_PATH)/../SDL2_ttf \
$(LOCAL_PATH)/../SDL2_image \
$(LOCAL_PATH)/../SDL2_mixer

LOCAL_SHARED_LIBRARIES := SDL2

LOCAL_SHARED_LIBRARIES := SDL2 \
SDL2_image \
SDL2_ttf \
SDL2_mixer


SDL2-mixer
SDL2_mixer/external/libmikmod-3.1.12
SDL2_mixer/external/libmikmod-patches
SDL2_mixer/external/smpeg2-2.0.0 の3つを
jniフォルダにコピー

SDL2-image
SDL2_image/external/libwebp-0.3.0を
jniフォルダにコピー

SDL2-ttf
SDL2_ttf/external/freetype-2.4.12/include内のファイルを
SDL2_ttfフォルダにコピー

clangの場合
smpeg2-2.0.0/audio/hufftable.cppの 0-1がエラーになるのでstatic_cast(0-1)にする


android-project/src/org/libsdl/app/SDLActivity.java
の50行目ぐらい

static {
System.loadLibrary("SDL2");
//System.loadLibrary("SDL2_image");
//System.loadLibrary("SDL2_mixer");
//System.loadLibrary("SDL2_net");
//System.loadLibrary("SDL2_ttf");
System.loadLibrary("main");
}
を修正
static {
System.loadLibrary("SDL2");
System.loadLibrary("SDL2_image");
System.loadLibrary("SDL2_mixer");
//System.loadLibrary("SDL2_net");
System.loadLibrary("SDL2_ttf");
System.loadLibrary("main");
}
これでOKだと思います。

●タブレットとデスクトップの違い
 タブレット端末は実機で動作させる場合とシミュレータ上で動作させる場合でシステムフォントのパスが変わると思います。
また入力関連の仕様も違います、単純なマウス操作以外の事をする場合も公式wikiのサンプルがないようです
あとウィンドウの仕組みやフルスクリーンの仕様なんかも違うと思います。

システムメッセージの処理をOS毎に変える等の措置は不要で、コードの変更無しでちゃんと動作します。

 タブレットの方が全体的設定がややこしい印象。

●SDLの関数の使い方
 説明するのが大変だし、実装する方がまだ楽なのでSDXFrameworkのMultimediaフォルダ内のソースコードを参考にしてください。
自力でラッパーするのが面倒な人はSDXFrameworkを使えばいいと思います。
https://sourceforge.jp/projects/dxframework/simple/

 SDXは全てヘッダーに実装しているので参照するヘッダーを変更して、参照するインクルードディレクトリを変えれば動くので、導入の手間はSDLとほぼ同じです。

 Ubuntuはclangの配布パッケージにバグがあるのか?bits/c++config.hが見つからないとかエラー出ます。
解決策を知ってる人がいたら教えて下さい。

 また一部の機能は未実装だったり、タッチ関連のジェスチャー等は手をつけていなかったりします。
細かい所が色々あれなので開発に協力してくれる人がいたら気軽にどうぞ。

 SDLはcで書かれていたりドキュメントが英語なのが難儀です。
 SDXは公式も日本だし、当たり判定とか、改行とか、入力の管理等も楽だし良いと思います。
開発者は一人なんですが、現段階でほぼ完成しているので2D用途なら大丈夫だと思います。

●マルチプラットフォームマルチメディアライブラリ
 Qt、cocos2d-x、SFML、GLFW3など他にも色々ありますし、cやc++に限らなければ他にも色々見つかります。
どれがいいかは、自身のプログラミングスキルや作成するソフトウェアの内容によるので、なんとも言えません。

 他のを使っていないのでなんとも言えませんが、SDLと雰囲気が近いのはSFMLかGLFW3
Qtはフォームアプリケーションがメインで、タブレット向けは実行ファイルがすごく大きいらしく、ゲーム用途としては微妙な感じ?
cocos2d-xはタブレット向けに特化している印象で、アドオンがXCode専用っぽい?

SDLの特徴はこんな感じ
○cなので早いし、他言語でバインディングしやすい
○機能がシンプル
 ・cocos2d-x等では導入済みのbox2Dやluaやシーン管理等を使わない人はそれが無い方がシンプルで使いやすい
 ・それらが欲しい人は、自力で導入する必要があるので面倒
○ライセンスがzlibなので表記すら不要
 ・1.3から2.0で変わった
 ・例えば、Qt無料版のLGPLは解析を禁止出来ない
○何年も開発しており利用者も多いので、将来性が期待出来る。
 ・SteamOSが推奨してるらしい?
○デスクトップ上で開発が楽
 ・デスクトップアプリとして開発してから移植出来るのでタブレット実機やシミュレータ上でデバッグしなくて良い
 ・処理性能の差は余裕を持つ必要があるし、タッチジェスチャーの感じとかタブレット実機が必要そう

●まとめ
 従来はJavaやらObjective Cを覚えないとタブレット端末の開発は無理だと思われていました。
最近はc++でマルチプラットフォーム開発するのが良い選択肢になってきたと思います、c++は良い言語ですね。

 マルチプラットフォームの開発が楽になったと言っても、Windows単体で動くソフトを開発する難易度と同じになっただけなので、同人ゲーム開発はやっぱり大変やで
スポンサーサイト

コメントの投稿

Secre

プロフィール

(´・@・)

Author:(´・@・)
ゲームの製作日誌です
 コメントは返事するけど、拍手コメントは返さない事があります。

メール:mr.dagonn★gmail.com
★を@に変えて下さい

twitter(更新情報をつぶやくbot)
アカウント

●公開しているゲーム
Vector作者ページ

●アンケート
FBSアンケート

TDアンケート

●バグ報告/質問/感想 掲示板
掲示板

●製作中のゲームライブラリ
SDXフレームワーク

●3DSのフレンドコード
2363-5987-4359
スマブラとかやってる

●自由ソフトウェア財団の賛助会員です
[FSF Associate Member]

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。