MIS.W 公式ブログ

早稲田大学公認、情報系創作サークル「早稲田大学経営情報学会」(MIS.W)の公式ブログです!

新ライブラリ開発中[AdventCalendar9日目]

こんばんは、✝生贄✝こと47代TTです。今日の話題はTTが作っているDirectXを使ったゲーム開発用ライブラリ、Shepherdです。

ライブラリの内容は、

  • 画像描画 (2Dのみ)
  • 入力 (キーボード・マウス・ゲームパッド)
  • 音楽再生
  • ファイル入出力
  • ファイルのアーカイブ
  • 通信 (TCPUDP)
  • UPnPNATによるポート解放

などなど。Visual C++上で動きます。

ぶっちゃけ、DXライブラリみたいな感じです、車輪の再開発…。あと、3Dにはまだ対応していません。

差別化要素としては、コードをいじらずにDirectX 9、DirectX 11どちらでも動かせるという点でしょうか。

DirectX 11にも対応しているからストアアプリ化も簡単だね、ということでストアアプリ用のライブラリも用意しようとしています。1月末にはできているはずです、というかできていないといろいろと問題です (コンテストなどの兼ね合い) 。

あとは、ネットワーク関連を強化しています。IPv6対応のほか、TCPではshutdownを用いることができるように改良し、UDPではマルチキャストに対応しています。UPnPNATでポート解放をすることもできます。

では、簡単なコード例を示してみます。


#include <shepherd.h>
#pragma comment(lib, "shepherd.lib")

using namespace shepherd::ShepherdControl;

//FPSの設定
const int FPS = 60;

int WINAPI WinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE hprevinstance, _In_ LPSTR lpcmdline, _In_ int ncmdshow) {
    //テクスチャのハンドル
    HTEX hogetex;

    //Shepherdライブラリの初期化
    Initialize(FPS);

    //hoge.pngからテクスチャを作成
    hogetex = LoadGraphFromFile(_T(“hoge.png”));

    //メインループ (ウインドウの閉じ判定とメッセージ処理を同時に行う)
    while (ProcessMessage()) {
        //描画セクションの開始
        StartRenderingSection();

        //hogetexを左上 (クライアント座標 0,0) に描画
        ChangeGraph(hogetex);
        DrawGraph(0,0,0);

        //描画セクションの終了 (FPS調整と画面描画)
        EndRenderingSection();
    }

    //Shepherdライブラリの終了処理
    Closing();

    return 0;
}

このように、DirectXを使っていることを意識しなくても良い設計になっています。

また、描画セクションをはっきりと分け、自動でFPS管理をすることで、外でwait系の命令を呼ばなくてよいように工夫されています。

今後の対応予定は、

  • ストアアプリ化対応
  • マニュアルの作成
  • GitHub等での公開
  • Spriteクラスもどきの作成
  • 3Dモデルの読み込みとレンダリング

などなど。

実はすでにゲームが作れるようにはなっています。実際に (幻になった?) ばななろく2はDXライブラリを使わず、すべてこのライブラリで組まれています。 (ばななろく2の完成はいつかな?)

すぐ公開すると思うので暇だったら触ってみてください。

2015/01/07追記

描画セクションの開始部分でBeginRenderingSectionと書かれていましたが、正しいコードはStartRenderingSectionでした。該当部分はすでに修正済みです。