マルチプラットフォームな開発環境であるSDL(Simple DirectMedia Layer)を使えば、ToolBox(CarbonAPI群)に関する知識が全く無くても、Macでグラフィックやサウンド、コントローラ(キーボードやパッド)等の入出力を扱ったゲームを簡単に作ることができます。
SDLはjava等とは異なり、単純にOS固有のAPIを隠ぺいし、ソースコードレベルで各種プラットフォーム同一の開発を可能とすることを目的としているので、Carbon等で開発したゲームなどと比べても速度的なデメリットは全く無いと考えられます。
ただし、専用プルダウンメニューやダイアログボックスなどOS固有の操作環境は利用することができませんので(OS毎に文化が異なるため統一された操作を提案できないからか?)、テキストエディタや、ツール等を作るのには向いていません。
なんといっても快適な開発環境でしょう(Mac用のゲームを創りたいのはもちろんのこととして)。SDLを使用すれば、同一のソースコードでWindows用のゲームも作成することができます。しかし、いまだにWindows上の多くの統合開発環境(IDE)は、「幕の内弁当」の如く1つのウインドウ内に全ての情報を窮屈に整列して押し込めることに執着しています。さらに数々のツールバーやパレットが画面を所狭しと横断し、1024*768程度のディスプレイでは、デバッグやソースの記述は、実に肩の凝る作業となります。
そこで、ほとんどの開発をMac上で行い、ファイル共有等を利用して他のプラットフォームでビルド&デバッグできれば、その開発は非常に楽になります。(更に幸運なことにOSXの標準開発環境であるXcodeやProjectBuilderは、様々なエンコード方式、改行タイプに対応してます。)
現在全てのMacにはRadeon等の高性能なグラフィックチップが載っています。しかし、ゲームやグラフィックをバリバリやるユーザ以外は、基本的な表示能力のパフォーマンスアップ以外の恩恵にはあずかっていない状態です。
SDLにはブリットなど各種グラフィック操作命令がありますが、折角ですから、ここはもっとグラフィックチップのハードウェアアクセラレーション機能を利用してみたいところです。
まず、SDLのサイトからOSX用の開発キット(Development Library)の最新バージョン(SDL-devel-1.2.7.pkg)をダウンロードし、パッケージをインストールします。インストールが完了したらXcodeを起動し、新規プロジェクトを作成しますが、ひな形の中にSDL OpenGL Applicationという項目が追加されてますので、それを選択します。
プロジェクトが作成されたら早速実行してみましょう。ひな形であるアトランティスのデモ(GLUT版はexampleフォルダにありますよ)が起動し、クジラやサメが泳ぎ出します。何かキーを押すと終了します。
このようにXcodeを使えば簡単にSDL-OpenGLアプリケーションは作れてしまうのです。(笑)
正直いきなりアトランティスのデモをいじるのは無理がありますから、必要なもの以外削除しましょう。
このグループと、
↑main.cのこのコードを削除。
以上を削除すればOpenGLの環境だけをセットアップするプログラムになります。
あとは、GLUTの時と同じように、初期化のコードと表示用のコードをinitGLとdrawGLへ挿入します。
main.cのソースにはOpenGLのヘッダがインクルードされてませんので#include <GLUT/glut.h>
も頭に挿入します。(※ウインドウ表示などはSDLを使用してますので、GLUT自体の初期化は必要ないです。)
initGLとdrawGLへコードを挿入
#include <GLUT/glut.h>
//↑これを頭に挿入しないとOpenGLのAPIを認識できないぞ。
.
.
(省略)
.
.
static void initGL () //OpenGL入門などを参考に初期設定する
{
glClearColor(0.0, 0.0, 1.0, 0.0);
glOrtho( -3.2, 3.2, -2.4, 2.4, -1, 1 ); //2D表示なので
}
static void drawGL () //ここは周期的に呼ばれるので、アニメションさせてみるといいかも
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
glVertex2d(-0.9, -0.9);
glVertex2d(0.9, -0.9);
glVertex2d(0.9, 0.9);
glVertex2d(-0.9, 0.9);
glEnd();
glutWireTeapot(0.4);
// glFlush();
}(※編集の都合でインデントに全角スペースが使用されています)
実行結果
以上です。とても簡単ですね。
SDLはマルチプラットフォームな開発環境ゆえ、OSに因らず知識を共有することができます。もしつまずいたなら検索をすることですぐに解決できることでしょう。
次ページではSDLのAPIを簡単に使ってみます。
041122版 初版