前回までの記事と同じように書いていきたいと思います。今回は、今までとは雰囲気が違います。
dxlibではたくさんの環境向けに開発できるようになりました。
- Windows
- Android
- iOS
- Nintendo Switch™
- PlayStation®4
- PlayStation®Vita
が対応関数に差がありますがdxlibを使ったプログラムが動く環境です。(非公式にはHTML5版もなくはないですが、非公式である以上まだ触れないでおきます。)
そこで、dxlibで複数の環境向けを同時に開発できる開発環境を構築できないかなと思いました。
なお、この記事は方法の考案が主になっています。ここで提案されている開発環境は実際に試したわけではありません。もし試した人がいたら結果を教えてください。
#1.対応させる環境
この記事では、できればもっと多くの環境を対応とさせたかったですが、上で書いた環境のうち、WindowsとAndroid向けに同時開発することを目指します。二つだけだとダメという人もいるかもしれませんが、iOS向けにはvisualstudioでc++で開発する方法が見つからないし、その他の環境に至ってはそもそも開発方法が一切わかりません。なのでWindowsとAndroid向けを目指したいと思います。
#2.同時に開発する方法の模索
まず、矛盾するようですが、dxlibは同時開発に非対応です。というのも当たり前で、一般的にUnityがマルチプラットフォーム開発で有名だと思いますが、あれは開発環境が最初からそう作られている上に、Unityの場合はmonoというc#でたくさんの環境の開発を行えるのを使っている(書いているときに一応調べたらmono以外を使うときもあるようですね.NET、IL2CPP、Burstが調べてて出てきました。けど基本的なことは変わらないはず。)からできることです。
一方で、dxlibは、WindowsとAndroidは同じvisualstudioを使うといっても、内部で行われていることは全く別ですし、ライブラリも別に用意されています。同時開発するのも難しいでしょう。
#3.あれじゃあ結局同時開発はできない?
最近、ネットで面白いものを見つけました。Uno platform(これ自体は2018年からあるようです)というものです。先ほど少し話したmonoを使ったvisualstudioで複数の開発向けに同時に開発できる環境です。C#でUWP、Android、iOS、Webの同時開発ができます。先ほど、内部で行われていることは全く別といいました。じゃあどうやっているのかと。じゃあどんな仕組みなのか説明します。
#4.Uno platformの仕組み
仕組み自体は単純で、環境ごとに複数のプロジェクトを作っています。
まず重要なのは、visualstudioの機能です。visualstudioはプロジェクトの上の単位として、ソリューションというのがあります。要は複数のプロジェクトを一つにまとめるものです。
Uno platformは一つのソリューション上で複数のプロジェクトを用意して、それぞれビルドしたい環境に合わせてプロジェクトを選択してビルドするようになっています。
そして存在している複数のプロジェクトの中に、Sharedというのがあります。コードを主に書くプロジェクトです。このプロジェクトで作成したソースコードをもとに他のプロジェクトでビルドを行っています。これこそが同時開発できる秘密です。
#5.本記事で用いる方法
ということで、このUno platformの仕組みを参考に、dxlibによる同時開発が行えないか試していきたいと思います。
方法を簡単に説明すると、プロジェクトを三つ用意します。まずコード記述用のプロジェクト。次にWindows用のプロジェクト、最後にAndroid用のプロジェクト。で、Windows用のプロジェクトとAndroidのプロジェクトでそのソースコードを参照するようにするというものです。ただエントリポイントが違うのでそこをどうにかするためにちょっと作業が必要になります。
#6.具体的な環境のの構築
まず必要なものとして、
- visualstudio(多分2017でも2019でも同じ方法が使えるはず)
- androidSDK
- dxlib(Windows版とAndroid版が必要です。ただしヘッダーファイルは消してください。android版のは使うので取っといてください)
があります。
早速具体的な方法を説明します。といってもここで説明するより公式の説明の方法の方がわかりやすいと思うので具体的といっても公式のページに載ってないところになります。
1. c++のプロジェクトを作る。本来はc++が使えればどのプロジェクトでもいいはずですが一応WindowとAndroidどっちでもいいので用意します。そして、プロジェクトにdxlibのandroid版のヘッダーファイルを追加します。内部で読み込んでいるので拡張子がhの物全部です。そしてcppファイルを追加します。この中に主にソースコードを書いていきます。この時、winmainでもandroid_mainでもなくmain関数の中に記述します。(返り値をintにします)
2. main.hを追加して、先頭でincludeします。
3. main.hの中身を
int main();
にします。
4. Windows用にdxlibの開発環境を作る(この時1のプロジェクトと同じソリューションになるように、新しいプロジェクトを作るときのダイアログの下の方で指定します)
5. android用にdxlibの開発環境を作る(この時1のプロジェクトと同じソリューションになるように、新しいプロジェクトを作るときのダイアログの下の方で指定します)
6. Windows用プロジェクトで、cppの中身を
#include "main.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
return main();
}
にします。
7. 1で作成したプロジェクト内のソースコードを参考できるようにします。ソリューションエクスプローラーの参照を右クリックして、参照の追加をクリックします。左側からソリューションをクリックして、ソースコード記述用のプロジェクトを追加します。
8. android用プロジェクトでcppの中身を
#include "main.h"
int android_main( void )
{
return main();
}
にします。
9. 7と同じことをやります
以上でプロジェクトの設定は終了です。
こちらの考えが正しければ後は、各環境用のプロジェクトをそれぞれビルドすればいけるはず。
#7. まとめ
今回の記事では今までの記事とは違い、マルチプラットフォームの同時開発の方法の提案をしてみました。もし実際に試した人がいたら報告ください。