クロスプラットフォームC ++ / OpenGL ES開発(iOS / Android)[終了]


10

私はすでにC ++とOpenGLの合理的な経験があり、最近モバイルゲーム開発を試すことにしました。Javaを使用してシンプルなOpenGL ES Androidアプリを作成した後、できるだけ少ないコードでAndroidとiOSの両方をターゲットにする方法を調査しました。Visual Studio 2015の誇りに思っているクロスプラットフォームアプリ開発ツールを使用してみましたが、あまりにも新しいため、文書化が不十分でした。プログラムから提供されたテンプレートプロジェクトを構築することはできましたが、これらのテンプレートを前提として、ゲームにアセットを追加したり、タッチスクリーン入力を処理したりする方法を理解できませんでした。

残念ながら具体的な願望があります。Googleで見つけるには具体的すぎます。AndroidおよびiOS用のプラットフォーム固有の薄いラッパーを使用して、C ++を使用するOpenGL ESゲームを作成したいと考えています。人々は私に同様の質問をしましたが(まったく同じではありません)、UIを気にする必要がないため、やりたいことは可能であるだけでなく、比較的簡単であると複数の人が答えています。

私はこのチュートリアルを試しましたが、それはほぼ3年前のものであり、おそらく古いテクノロジー用に設計されたものであり、その結果、さまざまな原因不明のバグに遭遇しました。けれども今のところ、そのチュートリアルは私が見つけたものに最も近いものです。それ以外はすべてAndroidのみ、またはMarmalade SDKを使用するために年間数百ドルを支払うことを推奨しています。たまに、コードを2回(JavaとObjective-Cで2回)作成する気がしますが、この解決策は可能であるという知識に動機付けられ続けていますが、何らかの理由で、現代の詳細のどこにも触れられていません。

要約すると、単一のC ++コードベースを少量のプラットフォーム固有のコードでラップして、iOSおよびAndroid用のOpenGL ESゲームを作成したいと思います。しかし、いくつかの人々がこのアプローチを推奨しているという事実にもかかわらず、誰もそれを行う方法を私に言うことはできません。誰かがそれが実際に可能かどうかを教えてもらえますか。もし可能なら、私が何ができるか、またはどこに行けばその方法を学ぶことができますか?



1
unity3dは、ソースへのアクセス権がないため、OPが要求するものとはかけ離れています。私はcocos2d-xを使用しましたが、コンパイルの問題はある程度残っています。Objective-Cの影響も感じられますが、好きな人もいるかもしれませんが、私にとっては気の毒です。ただし、これはオープンソースのソリューションであるため、OPが調査する価値があるかもしれません。
マシューサンダース

回答:


6

ここで、同様の質問に対する私の答えが役に立つと思うかもしれません。

また、他のソリューションのソースコードを調べると役立つ場合もあります。たとえば、Godotエンジンはクロスプラットフォームのオープンソースゲームエンジンであるため、料金を支払う必要はありません。

他の答えで述べたように、1つのIDEに頼って作業を行う必要はありません(おそらくそうすることもできません)。 CMakeScons、およびその他の多くのビルドツールは、プラットフォームおよびIDE全体のクロスコンパイル/ビルドプロセスに役立ちます。

たとえば、Godot EngineSconsを使用し、LLVMプロジェクト(clang C / C ++ / Objective-Cコンパイラで使用されるコンパイラフレームワーク)はCMakeを使用します。

ゲームの一般的なアプローチは、C / C ++でエンジンを構築し、ご存知のようにプラットフォームの仕様を抽象化することです。iOSとAndroidに関して言えば、これはOSとインターフェースするライフサイクル管理ロジックです。さらに一進んでEmscriptenを利用してasm.jsにコンパイルし、ブラウザでほぼネイティブの速度を実現したい場合は、requestAnimationFrame呼び出しに相当するメインループを抽象化して、同様のことを行っています。

Emscriptenは、SDLを使用して移植プロセスを簡単にすることをお勧めします。これは、プラットフォームの詳細を抽象化するのに役立つためですが、これを自分で行うことを妨げるものは何もありません(他に、大量の調査、デバッグなど)。

あなたが本当に、本当にクレイジーなら、サポートされているプラ​​ットフォームでネイティブC ABIJITにコンパイルするためにLLVMの力を利用して私がやっていることを実行し、独自の言語を書くことができます。

ポイントは確かに可能ですが、一部の道路は他の道路よりも複雑で時間がかかるものです。

注: iOSにコンパイルするには、Mac、 VM、または XCodeを備えた Hackintoshを介してMac OSXを使用する必要があります。これは、Macbook Proが開発システムの優れた候補となる多くの理由の1つです。

注2:今日の多くのクロスプラットフォームエンジンは、ゲーム固有のロジックにスクリプト言語を利用していることは注目に値します。 Unityは、たとえば、ソースコードに近づけることさえできません(ただし、ネイティブプラグインを作成することはできます)。スクリプト言語はプラットフォームにとらわれないため(特に、VMで実行される解釈された言語)、移植性を最小限に抑えるだけでなく、開発サイクルのスピードアップにも役立ちます。私の言語の目標は、JIT(主に開発時間の節約)と静的コンパイルの両方を可能にすることです。

注3:これをまだ見つけていない場合。SDLまたはプラットフォーム固有の内容を抽象化するその他のソリューションを利用しない場合は、各プラットフォーム固有のC / C ++インターフェース機能を利用する必要があります。iOSでは、コンパイラー(上記のclang)がすでにC / C ++をサポートしているため、これはXCodeでかなり簡単です。Androidでは、JavaとC / C ++の間で NDKとマーシャル呼び出しを利用する必要があります。


1
Godotエンジンのソースコードを調べました。少し過剰に見えます。不要な機能を使わずに自分で作成したい。どうすればいいのかよくわかりません。AndroidでまだC ++コードを正常に実行できていません。
クレイグ・ホーウッド

hehe ... ya NDKはピクニックではありません。正直なところ、開発者向けのカテゴリで、何らかの助けが必要なGoogleを見つけました。SDLオフリミットを使用していますか?必要に応じて、回答を更新できる詳細な情報があります。
マシュー・サンダース

SDLは立ち入り禁止ではありませんが、私はそこに行きたくありません。繰り返しになりますが、フレームワークなしで実現できた可能性があるという知識が少しばかりあります。
クレイグ・ホーウッド

私は常にそのバグに噛まれているので、あなたの気持ちはわかります。私は過去にNDKを使用したことがあり、セットアップとコンパイルの方法に大きな変更はないと思います。以前はターミナル経由でGDBを直接使用する必要があり、IDEはそれをサポートしていなかったため、デバッグが改善されたと思いますが、AndroidスタジオにNDKサポートを追加し始めたようですhellojniの例を試しましたか?
マシュー・サンダース

NDKは、現存する最も嫌なものの一つであるあなたは、参照としてbgfxが有用見つけるかもしれないgithub.com/bkaradzic/bgfx、それは薄いようではありませんあなたがが好むかもしれないとして、それは複数のレンダリングバックエンドを持っている
JBeurer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.