2009-04-06 11 views
2

私は約3週間でゲームを始めるつもりです。私はゲームを少なくとも別のプラットフォーム(Linux、MacOS)で走らせたいと思っていますが、私のチームはそれが多くの仕事だと考えています。私はそれを知っていましたが、Linuxに移植されないことに注意しなければならないものは何かを知りたがっていました(DirectXsoundのようなWindows固有のAPIは別として)?クロスプラットフォームのゲーム開発何を探しますか?

私はオンラインで読むことができました。sprintf_sのようなWindowsの "_s"機能はWindows上にしか存在しません。これは正しいですか、それともLinuxでも実装されていますか? 「安全」の機能については

答えて

6

後で窓への移植についてを参照してください。 (少なくとも、「sprintf_s」のインクルードファイルをgrepをすることは、まったく何もターンアップしない。)

それは、重い物を持ち上げる作業の一部を行うためにboostaprのようなクロスプラットフォームのライブラリを見て価値があるかもしれません。

を探すために、特定の物事のサンプル:

  • 入力/出力(DirectXの/ SDL/OpenGLの)
  • のWin32 /窓。UI
  • 同期プリミティブ(クリティカルセクション、イベント)
  • ファイルパス(ディレクトリセパレータ、ルート名)
  • ワイド文字の実装(Windowsの16ビットのWindowsコントロールを使用して時間機能(のCreateThreadなど)
  • Linuxの32ビット)Linux上
  • ませんMFCのサポート(のCStringなど)
+0

ありがとうございましたこれはまさに私が探していたものです誰かが何かを知っていればジムはここに投稿して忘れてしまいました:D – Annerajb

0

:彼らは非標準であり、ほとんどの安全:)

0

Endianessは外を見るものです。

エンディアンは、バイト内のビットの順序です。一部のプラットフォームはビッグエンディアンで、一部はリトルエンディアンです。

これは、プログラムのクロスプラットフォームに影響する可能性があります。しかし、これがもたらす最大の影響はネットワーク通信であろう。ネットワークメッセージを送信または受信する前に、エンディアンを変換する必要があります。

+0

この時点では、些細なことが懸念されるはずです。あなたがストリーミングされたデータ(ディスク、ネットワークなど)に使用しているバイトオーダーを定義し、それに固執する限り、あなたは大丈夫です。これが「ネットワーク」バイトオーダーのためのものです。 – MarkusQ

0

ゲームプレイに重点を置く場合は、ゲームを設計し、その移植は特に厄介ではないことを実装します。複数のプラットフォームで同時に実装する場合、それは簡単です。

しかし、あなたがエフェクトに焦点を当てるなら、「水中から他の人を吹き飛ばす」と感じるものをデザインし、ゲームアイデアをそれらに貼り付けると、あなたは滅びます。

本当にそれはあなた次第です。

+0

これは5ヶ月の学校プロジェクトで2つのゲームアイデアを選んで選んでいますが、移植後に私の人生を悲惨なものにする可能性がある潜在的な問題をチームに知らせたいと思っていました。彼らはstlやブーストを使用することができますWindowsライブラリですべてのコードを作るように。 – Annerajb

1

DirectX、OpenGL、SDLなどの非標準のエクステンションをカプセル化しようとすると、プラットフォームに基づいてこれらの部分を書き直すだけで済みます。

私は、移植することを考える前でも、1つのOSで再生できるようにします。

+0

私たちの学校以来、誰もがゲーム開発プログラムでWindowsオペレーティングシステムを持っているので、私のチームはLinuxとWindowsで作業することを納得させるので、経験のためのサイドプロジェクトです。 – Annerajb

0

windows-apisについてよく知らないけど、サポートしたいすべてのプラットフォームで毎日(またはコミット時に)全自動ビルドシステムをセットアップしました。あなたが他のマシンで動作しないウィンドウボックスで何かを開発するならば、あなたのビルドシステムはあなたに "プラットフォームxのビルドに失敗しました。ログファイル/添付ファイル/その他のものを参照してください"と通知する必要があります。それは、クロスpaltformの問題の多くをキャッチします。 Unittestsも同様に役立ちます。

複数のプラットフォームを最初からターゲットにするかどうかは別の質問です。

個人的に私は別のプラットフォーム上で開発を開始したい、その後、いいえ、_s関数は、標準のgccライブラリに実装されていません;-)

+0

私は現在これを調べていますが、私の学校ではalienbrainを使用するようになっているので、それを使用する方法を学ぶので、svnのアップデートとエクスポートよりも少し面倒です。 – Annerajb

4

私があなただったら、私はそこに利用できるフレームワークの一部、そのハンドルのプラットフォーム独立性を使用します。

私は友人と趣味のプロジェクトとして3D-Gameを書いています。サーバーはJavaで、WindowsとLinuxで実行されるクライアントです。私たちはOgreを3Dエンジンとして、OpenALをSound Engineとして使用しました。どちらもプラットフォームに依存せず、LGPLのもとで利用できます。

私が本当に別に書く必要があったのは、ソケット処理全体、ファイルシステムからの設定の読み込み、システムの初期化だけでした。プログラムの残りの部分と比較して、それはほとんど何もなかった。

WindowsやLinux(またはMac)でコンパイルするためには、プロジェクト全体をセットアップするのが最も時間がかかります。特に集中して問題をチェックする場合は特にそうです。あなたのチームに、生産中にこれらの問題を定期的にチェックする人がいれば、そんなに大きなオーバーヘッドはありません。

すべてのフレームワークがよく書かれた、プラットフォームに依存しないシステムであれば、ゲーム自体のプログラミングに比べて、それを異なるプラットフォームに適応させることはほとんど無駄です。

0

オペレーティングシステムの詳細に依存しないゲームのモデルを作成していることを覚えておいてください。あなたのゲームは、OSに依存しない状態管理とアルゴリズムに依存します。鍵は、特定のライブラリに依存せずにゲームロジックを書くことです。つまり、カプセル化が大量に必要です。

プラットフォームに基づいて変更できるルーチン、クラス、またはMACROを記述する必要はありません。異なるプラットフォームに合わせて調整できるクラスまたはtypedefを使用できる場合はDWORDを使用しないでください。 。

たとえば、フットボールの試合をする場合、ボールを投げるためのアルゴリズム、実行、タックル、プレイヤーの位置は、プラットフォームの依存関係がない標準のC++で完全に行うことができます。カプセル化がうまくいけば、ゲームの状態をファイルにダンプし、レンダリングプログラムで別々に表示することができます。

+0

ええゲームはカプセル化されます私はdwordのsprintf_sとwindows固有のものベースのエンジンアーキテクチャは、msvcの警告のために、すべての関数で_sを使用したような小規模の問題が多いです。 – Annerajb

0

本当にクロスプラットフォーム開発をしたいのであれば、すでにUnityやTorque Game Builder(2D)のようなガレージゲームのようなクロスプラットフォームエンジンを使用することをお勧めします。

私は事実上ゼロの経験を持っていますが、どちらが優れているかはわかりませんが、Torque Game Builderのデモは問題なく最初のチュートリアルを通過できず、技術サポートの質問に答えることはできません彼らはあなたが私のようなゲームデザインの初心者であれば、私はそれらを避けると言うことができるので、そうすると主張する。ガレージ・ゲームについての大きなことは、彼らの大きな支持であると思われていました。私はゼロサポートを見て、実際には、「こんにちは、ここの誰か」の束しか見ていませんでした。私は彼らの製品をサポートすることをあきらめていると思います。

http://unity3d.com/

http://www.garagegames.com/

+0

これは学校のプロジェクトのためのものであり、fmodとなる可能性のあるサードパーティのAPIを使ってゲームを作り直す必要があるので、これは疑問の余地がありません。 – Annerajb

0

私はほとんどのクロスプラットフォームのゲームは、これらのライブラリを使用して書かれていたので、誰もがlibSDLとOpenGLを言及していない驚いています。

ゲームが2Dの場合、libSDLを使用できます。それを使って書かれたゲームの良い例はThe Battle of Wesnothです。 SDLはWindows上でDirectXを使用しています。単なる薄いラッパーです。

ゲームが3Dの場合は、OpenGLを使用してください。たとえば、Quake 3はそのライブラリを使用します。たくさんの例やドキュメントがあります。もちろん、OpenGLをラップするライブラリがたくさんあるので、低レベルのものを使う必要はありません。 OGRE、Crystal Spaceなどを調べてください。

基本的なC/C++ライブラリと関数の互換性については、いくつかのLinuxをインストールし、関数のマニュアルページを実行して存在するかどうかを調べるのが最適です。あなたはそれを見ることができますon the Internet

+0

私が見ることができる限り、受け入れられた答えはSDLとOpenGLの両方を指しています... –

+0

私はそれを逃したように見えます。注目してくれてありがとう。 –

+0

そして私たちのゲームは3dで、私たちは既にopenglを使っています。私たちは、sprintf dwordのようなものとそのような低レベルのもののようなものをもっと狙っています。私は何をしたのVM웨어をインストールし、ubuntuをインストールし、私が使用している小さなクラスのコンパイルを開始します。 – Annerajb

関連する問題