当社は、ネイティブのAndroid/iPhone開発といくつかのクロスプラットフォームソリューション、特にMarmalade SDK(以前のAirplay SDK)を選択しようとしています。
私たちはコンピュータービジョンの会社です。つまり、カメラデバイスへの低レベルのアクセスが必要です。また、私たちのアプリケーションは計算コストが高いため、利用可能な処理能力を少しずつ絞る傾向があります。
私たちのチームは、プラットフォーム固有のソリューションを提供するためにObjective-CとJava(またはC)の両方で十分な経験があります。しかし、私たちの主な焦点は常にC++です。むしろ、クロスプラットフォームソリューションを使用します。
私たちの最大の懸念は、マーマレードを選択すると、処理速度が犠牲になるか(主な懸念)、カメラフレームバッファーへの低レベルアクセスが複雑になるため、開発時間が大幅に増加することです。
私の質問は、明らかなことに加えて、プロセッサ集中型ビデオ処理アプリケーション向けのMarmalade SDKの利点ですが、特に制限があることです。
私はインディーゲーム会社でマーマレード/エアプレイをほぼ2年間使用しています。私にとっては1人のプログラマであり、MS Dev Studio(これまでのお気に入りの開発環境)を使用してWindowsでほぼすべての作業を行うことができ、多くのことを処理する必要がないためプラットフォーム固有の詳細、特にさまざまな開発ツールを使用すると、ゲームコンテンツに費やす時間が多くなります。
マーマレードでは速度は問題になりません。 C++コードはネイティブに実行されます。また、カメラやその他の機能へのアクセスはあまり問題になりません。既に提供されているか、拡張機能SDKを使用して追加できます。これは非常に簡単に使用できます。
マーマレードは成熟した製品であり、同社は無料で製品を使用しているインディー開発者にとっても、問題を迅速に解決するのに非常に役立ちます。クロスプラットフォーム性に加えて、メモリリークトラッカー、ロギングシステム、グラフィックス分析ツールなど、いくつかのNiceツールが組み込まれています。
マーマレードで経験したいくつかの欠点があります。
理論上、拡張システムを介してAPIまたはサードパーティSDKにアクセスできますが、実際には必要なものはまだ存在しない場合があります。例として、多くの開発者は現在、Flurryの分析パッケージを統合するのに苦労しており、一部の開発者にとっては課題となっています。この状況は、他の多くのサードパーティSDKと同様です。 Objective-C開発を行っている場合、統合するのは2、3行だけかもしれませんが、Marmaladeを介してより困難になる可能性があります。
いくつかのことは、操作するクロスプラットフォームレイヤーのためにあまり自然ではありません。私の例は次のとおりです。
IOSとAndroidの両方で、すべての画面サイズでスプラッシュ画面(アプリケーションの起動画面)を正しく表示するのに問題がありました。そして、マーマレードアプリ自体のデバイスの読み込みと、アプリコードを読み込むマーマレードのステップとの間で遷移する際に、ちらつき、短いブラックアウト期間、または画像のサイズ変更なしで表示するのは困難でした。
マーマレードは、固定ヒープを事前に取得する非常に単純なメモリモデルを課し、すべてのメモリ割り当てはマーマレードを通じて行われます。システムの観点から見ると、アプリはメモリの大きなブロック(またはいくつかの大きなブロック)を保持しています。これにはいくつかの利点がありますが、メモリ警告を受け取り、不要なリソースを破棄するなど、iOSモデルとこのモデルを二乗する問題がありました。 「1つのサイズがすべてに適合する」ということは、実際にはいくつかの重要な機能を失うことになります。
拡張マネージャーやその他のメソッドを使用してネイティブUI要素を表示できますが、かなりの量のネイティブルックアンドフィールUIを統合するのは難しい場合があります。したがって、アプリがゲームのようで、ユーザーが非標準のボタンなどに対処できる場合は問題ありませんが、重要なネイティブUIが必要になると予想される場合は難しくなります。 [編集:マーマレードの最近のバージョンでは、一般的な方法で標準UI要素を指定し、デバイスに適切なウィジェットを使用して実装できるネイティブUIフレームワークが追加されました。私はこれを使用していませんが、かなり包括的に見えます。]
問題が発生した場合、それが一般的なOSの問題なのかマーマレードの問題なのかがはっきりしないことが多く、助けを見つけようと孤独になりがちです。たとえば、最近、iOSとAndroidの両方で、ゲームにアプリ内購入を追加しました。 IAPは困難であり、追加のSDKレイヤーがなくても、対処すべき特別なケースがたくさんあります。私の場合、Appleによって小さな問題でアプリが拒否され、拒否された状態のときにアプリ内購入も「拒否」された状況がありました状態(IAP自体に問題はありませんでしたが、これはAppleのプロセスのちょっとした癖です。)アプリ内購入機能を回帰テストしようとしたとき(この非アプリ内の修正を送信していました) -購入関連の問題)、適切なエラー結果を取得する代わりに、ゲームは実際にクラッシュしていました。アプリ内購入コールバックを処理するためのレイヤー(それが判明したことです[2012年11月28日更新:マーマレードは、最近のSDKアップデートでこの問題を修正したと報告されています])。
そのような状況では、スタックオーバーフローを利用して助けを求めることができますが、実際には誰も助けてくれません。そのため、マーマレードチームに頼って答えを返します。私が言うように、彼らはこれについてかなり良い仕事をしているが、通常のiOSプログラマーの世界的なコミュニティからのStack Overflowのほぼ瞬時の応答と競合する方法はない。ですから、この最後の1つは、Marmaladeのようなシステムを使用する上での私の最大の関心事です。さまざまなプラットフォームSDKの詳細を把握する前に時間を節約できますが、問題が発生した場合は、マーマレードチーム(またはフレンドリーなマーマレードコミュニティメンバー)の「慈悲」に戻り、あなたに答えを。 (ここでは、問題解決の標準優先順位を取得するだけの無料のインディー開発者として書いていることに留意してください。保証された迅速な解決を得るために支払うことができます。)個人的には、私のプロデューサーと「これについてのマーマレードの人からの回答を待っています。」
(問題3の別の例は、最近まで特定のAndroidデバイスで効果音が遅れる問題があったことです。これはマーマレードの問題であり、最終的には解決しましたが、その間、基本的にあなたができることは何もありません。)
(他のレスポンダーが指摘したように)Marmaladeがなくても、iOSまたはAndroidのC++でコードベースの大部分を保持できることに注意してください。
上記の潜在的な問題の長いリストにもかかわらず、私はマーマレードのファンであり、すべての会社が無料で提供してくれたことに感謝しています。このツールは、(私にとっては)badaやPlayBookなど、他のプラットフォームでは気にすることのないプラットフォームになると、本当に輝いています。 PCとDeveloper Studioの快適さから(または、あなたの生活を少し難しくしたい場合は、Xcodeを搭載したMacから)本当に幅広いデバイスに展開できます。彼らが持っているシミュレータツールは素晴らしく、デバイス自体でデバッグしなければならなかったインスタンスはほんの少ししかありませんでした。一般的に、シミュレータで動作する場合は動作します。 IdeaWorksは大きな課題を抱えており、これらすべてのプラットフォーム(つまり、Windows Phoneを除くすべての重要なデバイス)でこれらすべての機能(つまり、基本的にモバイルデバイスで提供されるすべての機能)をジャグリングする素晴らしい仕事をしています。 7(現在、ネイティブコードが許可されていないため)。いくつか注意点があります。
マーマレードのCTOである私は偏見があります...しかし、キー要件が(1)カメラへのアクセスと(2)「利用可能な処理能力を少しでも絞り込める」能力であれば、マーマレードは素晴らしい選択です。
マーマレードは、C/C++をネイティブARM(またはx86)命令にコンパイルします...トランスコーディング、仮想マシンなし。既存のC/C++コード、ほとんどすべてのC /また、プロジェクト内でASMコードを使用できます。また、デプロイするプラットフォームに関係なく、WindowsまたはMacですべての開発を行うことができます(はい、コンパイル/テスト/デプロイも可能です) WindwsのiOSのみ)。
Android開発:AndroidからのCamera API自体は少しバグがあるようです(例:2.1より前にはありません(画像をスクランブルせずにカメラをポートレートモードで表示するためのソリューション)。その上にある別の抽象化レイヤーは、アクセシビリティ(機能など)の点で優れているか、さらに悪い場合があります。 、独自のアプリに必要になる場合があります。
マーマレードは優れたネイティブ拡張フレームワークを提供します
http://www.madewithmarmalade.com/marmalade/features/extensions-development-kit
最終的に、特定の機能のネイティブ実装に直接ジャンプできることを意味します。メインアプリのクロスプラットフォーム開発のコアメリットを維持します。
また、Androidでは、マーマレードがAndroid NDKを使用するため、データ処理用のC++コードは、対応するAndroid Javaよりも高速に実行されます。コード。
マーマレードと拡張機能とネイティブコードの速度でゲームを作ることで、「ネイティブ」アプリと同様に少なくともを提供できると確信しています。
私はMoSync Android/iOSを使用しますが、MoSyncで働いているので、そう言います。
しかし、すべての公平性において、私はMoSync Camera APIを好みます。
本当にすべての処理能力を絞り出したい場合は、ASMを使用する必要があります。
/トニー
マーマレードは悪くありません。2013年に使用しました。いくつかのバグ、いくつかの迷惑(修正されたメモリプール)が、全体的に悪い経験ではありません。
唯一の本当の失望は、Linuxのサポートがないことです。 Marmaladeの人たちが、LinuxではなくBlackberryのような不明瞭なプラットフォームをどのようにサポートできるかわかりません。意味がない。 Steam OS(Linuxベースのゲーム中心のプラットフォーム)の成熟に伴い、これは変化する可能性がありますが、Steam OSは、現時点では他のOSがもたらすもの以外に多くのことを表に出していません。