SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

シンプルなマルチメディアプログラミング向けライブラリ「SDL.NET」

オープンソースのライブラリ「SDL.NET」で始める
ゲームプログラミング ~前編~

シンプルなマルチメディアプログラミング向けライブラリ「SDL.NET」 (1)

簡単なプログラムの作成

 SDKがきちんと使えることを確認することと、SDL.NETを用いてのプログラム作成の流れを知っていただくために、実例に先立って、ウィンドウを表示するだけの簡単なプログラムを作成したいと思います。

 まずは開発環境を立ち上げ、新しくプロジェクトを作成しましょう。作成するのは[Windowsフォームアプリケーション]です。適当なプロジェクト名を付け、[OK]ボタンを押してプロジェクトを作成します。

図1 新しいプロジェクトの作成
図1 新しいプロジェクトの作成

 続いて、プロジェクトに参照設定を追加してやります。ソリューションエクスプローラの[参照設定]を右クリックし、[参照設定の追加]をクリックします。すると、参照関係を追加するためのダイアログが開くので、先ほどSDKをインストールしたフォルダの中にある、binフォルダの中の「SdlDotNet.dll」を選択して[OK]をクリックします。

図2 参照関係の追加
図2 参照関係の追加

 最後に、ソリューションエクスプローラから、今回のプログラムでは必要のない[From1.cs]を[削除]しておきます。

図3 ソリューションからForm1.csを削除する
図3 ソリューションからForm1.csを削除する

 これで、下準備は完了です。

メインプログラムを作成する

 下準備ができたら、ソリューションエクスプローラから[Program.cs]を開き、中身を書き換えます。

リスト1
using System;

using SdlDotNet.Core;
using SdlDotNet.Graphics;


namespace HelloSDLDotNet
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Surface screen; // (1)

            Video.WindowCaption = "HELLO SDL.NET WORLD"; // (2)
            screen  = Video.SetVideoMode(640, 480); // (3)

            Events.Quit += new EventHandler(delegate(object s, QuitEventArgs e) { Events.QuitApplication(); });// (4)
            Events.Run(); // (5)
        }
    }
}

 プログラムが書けたら、[デバッグ]-[デバッグ開始]を選択して、プロジェクトをビルド・実行します。真っ黒な画面に、HELLO SDL.NET WORLDというタイトルを持つウィンドウが表示されれば成功です。

図4 動作確認サンプル
図4 動作確認サンプル

プログラムの解説

 それでは、プログラムリスト1をもとに、SDL.NETを用いたプログラム作成の流れを解説します。

 最初に、using節に今回利用するライブラリの名前空間を列挙しています。必須事項ではありませんが、SDL.NETではこれを行わないと名前が非常に長くなる傾向にあるため、本稿では極力using節に名前空間を指定し、短い名前で対応できるようにしています。

 また、ここではCoreライブラリとGraphicsライブラリを指定していますが、このうちCoreライブラリはイベントなど、SDL.NETの根幹処理を担当する部分を提供してくれるライブラリで、SDL.NETのプログラムを作成するとき、必要な機能をまとめたライブラリです。Graphicsライブラリは画面処理やSurfaceクラスなど、基本的な画像関連の処理を提供してくれるライブラリです。

 このほか、キーボード等の入力処理を提供してくれるInputライブラリ、BGMやSE機能を提供してくれるAudioライブラリ等、機能別にさまざまなライブラリが提供されています。

 プログラム本体では、はじめに(1)の部分で画面の情報を記録するため、Surfaceクラスのscreenというオブジェクトを用意しています。SurfaceクラスはSDL.NETのグラフィック機能の中核を成すクラスで、画像に関連した基本的な機能がまとめられています。

 (2)の部分ではVideoオブジェクトを操作してアイコンを設定したあと、ウィンドウのタイトルバーに表示する文字列を指定しています。その後で、(3)の部分でSetVideoModeメソッドを呼び出し、クライアント領域の大きさが640x480になるウィンドウを作り、先ほど用意したscreenオブジェクトに確保しています。このことから分かるように、SDL.NETでは画面もSurfaceクラスのオブジェクトとして確保できるため、画面を画像と切り分けて考える必要がなく同じ感覚で処理することが可能です。

 またここで、Videoオブジェクトは画面を指す単一のオブジェクトで、画面への操作は(直接的であれ間接的であれ)Videoオブジェクトを通じて行うことになります。“単一の”と断ったのは、SDLでは通常の方法を使った場合、2つ以上のウィンドウオブジェクトを同時に扱うことができないからです。つまり、screen1には640x480のウィンドウを入れておき、screen2には320x240のウィンドウを入れておいて、ふたつのウィンドウを同時に表示させながら、連携してプログラム全体を操作するようなことはできません。従って、先の解説でscreenオブジェクトに画面を確保したというのは、正確にはscreenオブジェクトに画面への参照を格納したと言い換えることができます。

 ここまでで画面の準備は終了です。実際にゲームプログラムをする時には、フルスクリーン表示を行ったり、ハードウェアバッファを利用したい場合などがあると思いますが、基本的にはここでやったことと変わりません。具体的には、ほとんどがSetVideoModeメソッドに渡す引数を変化させることで対応可能です。詳しくはドキュメントに同梱されているSetVideoModeの項をご覧ください。

 続いて、イベントの準備に入ります。画面関連のときと同様に、イベントを処理するためにはEventsという単一のオブジェクトを操作していきます。(4)の部分ではウィンドウに対して閉じるという操作が行われた時に対応するメソッドを追加しています。今回は、このイベントでウィンドウを閉じる処理だけを行いたいのと解説の関係から、匿名メソッドを使って記述していますが、通常はこのイベントに対応するメソッドを別に用意した方が無難です。

 こうして画面とイベントの準備が完了したら、EventsのRun()メソッドを呼び出してアプリケーションを実行します。

 このように、SDL.NETでは「画面やイベントの準備」→「Runメソッドの実行」という手順で、アプリケーションを構築していきます。

次のページ
レトロ風テニスゲームの作成

この記事は参考になりましたか?

シンプルなマルチメディアプログラミング向けライブラリ「SDL.NET」連載記事一覧
この記事の著者

太田 晃(オオタ アキラ)

 ブログ(http://repse.blogspot.com/)では、coLinux上にMinGWを用いてクロスコンパイル環境を構築し、そのうえでSDLやOpenGLを使ってWindows向けのプログラムを書くとか、海外のソフトウェアを(勝手に)日本語化するとか、Windowsのインデックスサービ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3461 2009/02/17 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー