とりあえず選んだデモはコレ、Bouncing Penguin。デモを上から見ていって MacOS X のマークが付いてるのがなかなか出てこなくて…。Boom と Bouncing Penguin でどちらにしようか迷って、ペンギンなのでこっちにした。 ダウンロードした bouncing.zip を展開すると…macosx フォルダに Xcode のプロジェクトファイルがあるわけじゃなく…。README には make してね!とあるけど、今回は Xcode で SDL のテンプレートを使ってビルドしたいので make はしない。
bouncing.c を眺めてみるとどうやら SDL_mixer の Framework が必要らしい。ググってさっくりバイナリをダウンロード。マウントして SDL_mixer.framework を /ライブラリ/Frameworks/ へコピー。これで準備は OK。

まずは Xcode を起動して SDL Application のプロジェクトを作る。

名前は myBouncing にする。

出来上がったプロジェクトに Framework を加える。/ライブラリ/Frameworks/ から SDL.framework と SDL_mixer.framework を Frameworks グループへドラッグ&ドロップ。

ダイアログには特に何もせずに[追加]をクリック。

次にデモの bouncing フォルダから画像データ(bouncing.bmp)と音データ(bouncing.wav)を Resources グループへドラッグ&ドロップ。これもダイアログには何もせずに [追加] をクリック。

ソースコードは bouncing.c をそのまま main.c にコピーして、コピーした main.c の int main をオリジナルのもの
int main(int argc, char *argv[])
にしておく。
これでビルドすれば OK!と思ったのだけど、エラーが出た。
/Users/paraches/myBouncing/main.c:12:23: error: SDL_mixer.h: No such file or directory
だそうだ。う~ん、ヘッダファイルが見つかってない??? というわけで、ターゲットを選択して command+I で情報を見る。ビルドタブ?の下の方、検索パスのヘッダ検索パスに /ライブラリ/Frameworks/SDL_mixer.framework/Headers/ を加えた。

再度ビルドすると今度は無事ビルド終了。 早速実行すると…GDB が起動。コンソールを見ると
Error: 'bouncing.bmp' could not be open: Couldn't open bouncing.bmp
だそうだ。
どうやら
s_surface = SDL_LoadBMP("bouncing.bmp");
ここで bouncing.bmp が読み込めてないらしい。リソースはどうやって読むのよ?と思ったら、どうもファイルを読むのはアプリケーションと同じフォルダにあれば読めるらしい。それじゃデータをアプリの中に入れられないじゃん?と思ったらこんな事をして読み込むんだそうな。
s_surface = SDL_LoadBMP("myBouncing.app/Contents/Resources/bouncing.bmp");
なんか格好悪い。アプリの名前をコロコロ変える事はないだろうけど、それをソース内に書いちゃうのはなぁ~。 で、SDLMain.m の方を見ると
- (void) setupWorkingDirectory:(BOOL)shouldChdir
なんてものが。アプリケーションの起動が終わった時に呼ばれてる。ここでカレント?フォルダをアプリケーションのあるフォルダにしているので、そうでなくて Contents/Resources フォルダをカレントフォルダにしてしまえば良いんじゃない? というわけで
[[NSFileManager defaultManager] changeCurrentDirectoryPath:[[NSBundle mainBundle] resourcePath]];
を - (void) setupWorkingDirectory:(BOOL)shouldChdir の最後に入れておいた。これで必ずカレント?フォルダを Contents/Resources に変更できる。
というわけで、再度ビルドして起動! 無事エラーも出さずに bouncing penguin が起動した!
それにしても、Xcode の使い方あんまりわかってないな~。
スポンサーサイト
テーマ:Mac - ジャンル:コンピュータ
|