各プラットフォーム共通#

本項では各プラットフォーム共通で行うべき準備の手順を紹介します。

ここで紹介する構成や手順は一例であり、全てに従う必要はありません。MGLの開発者自身がこの構成でゲームの開発を行っているという参考例として捉えてください。

ディレクトリ構成#

まずは、これから開発するゲームのためのディレクトリを用意しましょう。

MGLは特定のディレクトリ構成や名前を前提としていませんが、多くのプラットフォームに柔軟に対応するためには考慮すべき点がいくつか存在します。ここでは、例として次のようなディレクトリ構成で進めていきます。

ディレクトリ構成の例
app-name
├── framework
├── project
├── resource
├── src
└── workdir

各ディレクトリの内容は次の通りです。

app-name

あなたがこれから作ろうとしているゲームの名前です。任意の名称を用いてください。多くの場合、そのプロジェクトを表す短いコードネームが用いられます。

framework

ゲームが利用する外部ライブラリを格納するディレクトリです。MGLもこのディレクトリ以下に展開します。

project

各プラットフォームごとのプロジェクトファイルを格納するディレクトリです。Windows向けならVisualStudio用のソリューション一式を、macOSやiOS向けならXcode用のプロジェクトをこのディレクトリ以下に生成して格納します。

resource

ゲームが使用する素材を格納するディレクトリです。ここには素材の作成に関わるファイル全般を格納し、実際にゲームと共に提供する必要のあるリソースは後述のworkdirにコピーしてください。リソースのコンバータを作成する場合、コンバート元の素材をここに配置し、出力先をworkdirに指定する事を想定しています。

src

ゲームのソースコードを格納するディレクトリです。

workdir

Windows向けの開発で、作業ディレクトリとして指定する場所です。ゲームの実行に必要なリソースはここにコピーしておく必要があります。また、セーブデータの保存先も標準ではこのディレクトリになります。

macOSやiOSなどはディレクトリの用途が厳格であるため、アプリケーションがこのディレクトリに直接アクセスすることはありません。しかし、ファイルの格納先を共通化させるために、プロジェクトに追加するリソースの保存先として使用します。

ダウンロード#

次にMGLのダウンロードページにアクセスし、最新のMGL本体をダウンロードしてください。

注釈

MGLは当面の間ソースコードのみでの提供となります。

MGLはframeworkディレクトリ以下に格納します。まず、frameworkの直下にmglというディレクトリを生成し、そこにダウンロードしてきたアーカイブファイルの内容をコピーします。結果、次のようなディレクトリ構成になることを想定します。

MGL展開後のディレクトリ構成
app-name
├── framework
│   └── mgl
│       ├── LICENSE.txt
│       ├── conv-charset.sh
│       ├── doxygen
│       ├── include
│       ├── project
│       ├── src
│       └── template
├── project
├── resource
├── src
└── workdir

アプリケーションデリゲートの作成#

MGLで任意のプログラムを実行するには、アプリケーションデリゲートと呼ばれるクラスを作成する必要があります。このクラスはアプリケーション側のメインルーチンとなるもので、MGLの初期化時に登録する必要があります。

アプリケーションデリゲートは全てのプラットフォームで共通して利用可能です。各プラットフォームごとの準備を行う前にあらかじめ準備しておきましょう。

アプリケーションデリゲートはMGL::ApplicationDelegateを継承したクラスです。このクラスを継承した、画面を青くするだけのクラスYourApp::Applicationの実装例を次に示します。ファイル名はそれぞれapp_main.ccapp_main.hとします。

注釈

YourAppというネームスペースは適切なものにリネームしてください。また、クラス名やファイル名についても必要に応じて置き換えてください。

app_main.h(ヘッダ側)
#ifndef INCGUARD_APP_MAIN_H_1606560829
#define INCGUARD_APP_MAIN_H_1606560829

#include <mgl/mgl.h>

namespace YourApp
{
class Application : public MGL::ApplicationDelegate
{
public:
    Application() noexcept;

private:
    virtual bool OnInitialize() noexcept override;
    virtual void OnFrameUpdate() noexcept override;
    virtual void OnExit() noexcept override;
};
}   // namespace YourApp

#endif  // INCGUARD_APP_MAIN_H_1606560829
app_main.cc(ソースコード側)
#include "app_main.h"

namespace YourApp
{
/* ------------------------------------------------------------------------- */
/*!
 *  \brief      コンストラクタ
 */
/* ------------------------------------------------------------------------- */
Application::Application() noexcept
{
}


/* ------------------------------------------------------------------------- */
/*!
 *  \brief      初期化処理
 *  \retval     true    成功
 *  \retval     false   失敗
 */
/* ------------------------------------------------------------------------- */
bool Application::OnInitialize() noexcept
{
    return true;
}


/* ------------------------------------------------------------------------- */
/*!
 *  \brief      フレーム更新処理
 */
/* ------------------------------------------------------------------------- */
void Application::OnFrameUpdate() noexcept
{
    MGL::Render::Renderer2D renderer;

    // 青色で画面をクリア
    renderer.Clear(MGL::kColorBlue);
}


/* ------------------------------------------------------------------------- */
/*!
 *  \brief      終了処理
 */
/* ------------------------------------------------------------------------- */
void Application::OnExit() noexcept
{
}

}   // namespace YourApp

重要

ソースコードは必ずUTF-8で保存し、改行コードはLF(0x0A)のみを使用してください。

ここで作成したapp_main.ccapp_main.hはsrcディレクトリ以下に保存してください。

各プラットフォームごとの準備#

ここから先の手順は各プラットフォーム向けのプロジェクトの作成になります。必要に応じて次の手順へと進んでください。