ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A


4
XNA GameComponents間(またはゲーム内の任意のタイプのコンポーネント間)の通信を容易にするためにどのテクニックを使用する必要がありますか?
私は最初の「適切な」ゲームプロジェクトから始めています。必然的に、XNAのゲームコンポーネントがどのように通信するかを決定しようとするブロックにぶつかりました。 以前の(Java)GUIプログラミングイベントから、ハンドラーとリスナーは前に進んだように見えました。ですから、イベントの登録とそれらのイベントにサブスクライブしたクラスを受け入れ、それらを処理するハンドラーを備えた、ある種のイベントバスがあります。例(疑似コード): class SpriteManager Update(){ if(player.collidesWith(enemy) // create new 'PlayerCollisionEvent' } class HUDManager onPlayerCollisionEvent(){ // Update the HUD (reduce lives etc) } ただし、これを完全に達成するために必要なコード設定(C#で)はわかりません。イベントを追跡しているもの(ある種のバス?)とその構造は? ゲームサービスについても多く言及されているようです。これにより、メインのGame.csクラスにGameComponentを登録し、メインの 'Game'オブジェクトへの参照を持つコードの任意の場所からフェッチできます。SpriteBatchオブジェクトでこれを試しましたが、非常に簡単に見えます。しかし、これがイベントモデルほど柔軟ではないことがわかります。 たとえば、敵が死亡した場合を考えてみましょう。ゲームのスコアを更新したい。サービスを使用して、Game1で作成され、サービスとして追加されたStateManagerオブジェクトへの参照を取得し、 'score'を新しい値に設定できます。「onEnemyDeath」イベントはさまざまなクラスで別々に処理できますが、関連する「敵の死の検出」セクションの1行のコードで開始され、必要な各GameComponentを個別にキャストしてから何でも呼び出すよりも良いと思いますメソッドが必要です。 それとも、これらは他の戦略よりも劣っていますか? これは、ゲーム通信のパラダイムと同じくらい、私のC#知識が不十分であることの一部だと思いますが、この基本的なことを正しくしたいのですが。 更新 サービスを確認したことの方が詳細であると私は確信していません。これは、基本的に(私が理解しているところから)グローバル変数を渡すことです。 アップデート2 イベントの処理とサンプルコードのテストに関するこの基本的なチュートリアルを見てきたので、私が議論しているのはイベントが論理的な選択になると思われます。しかし、私が見たサンプルでそれを使用することはあまりできません。すべきでない明白な理由はありますか?

2
エンティティの状態がenter()、execute()、exit()を完全に利用しない場合の設計上の欠陥はありますか?
私はMat BucklandのプログラミングゲームAIの例をフォローしていますが、エンティティの状態で常にenter()、execute()、exit()を使用する必要はありません。たとえば、RPGでは、武器に装備状態がある場合があり、その状態に対してenter()およびexit()を使用して、プレーヤーの能力モディファイアに加算または減算することができますが、実際にはexecute()の必要はありません)。これは私のエンジンの設計上の欠陥ですか、それともこのアプローチの欠点ですか?

4
イベントマネージャシステムを設計する際に考慮すべきことは何ですか?
私はJavaゲームエンジンの基本をいじくり回しており、イベントマネージャーシステムに追加する準備ができたところに到達しました。 理論的には、イベントマネージャーがすべきことはわかっています。特定のイベントにオブジェクトを「登録」できるようにし、イベントマネージャーがイベントの通知を受けるたびに、イベントを「登録済み」リスナーにブロードキャストします。私が困惑しているのは、それを実装し始める方法です。 イベントシステムを最初から実装することについて、オンラインで何も見つけることができなかったので、この場合のベストプラクティスとは何か、私がすべきこととすべきでないことについてのインプットを探しています。 たとえば、ゲームオブジェクトごとにEventManagerフィールドが本当に必要なのでしょうか。すべてのゲームオブジェクトは単一の抽象親クラスを継承しているため、静的参照を使用して、すべてのゲームオブジェクト間で共有されるイベントマネージャーのインスタンスが1つだけになるようにする必要があります。アプレットを使って、各オブジェクトのレンダリングにすでに使用しているのと同じようなことをしています。 可能なサブスクライブイベントごとに、ある種のコレクションを維持する必要があると思います。必要に応じて、リストにゲームオブジェクトを追加したり削除したりします。ブロードキャストする必要があるイベントのキューを作成することは可能だと思います。その場合は、メインのゲームループに「EventManager.Update()」を追加し、Update()メソッドが最後に発生したイベントをブロードキャストするようにすることができます各フレームの。最後に、各オブジェクトにはHandleEvent(Event e)メソッドがあり、それらを適切に解析して応答することができます。 これは、そのようなシステムの実装に向けた適切な方向性のように聞こえますか、それとも、軌道から外れているのか、および/または非常に明白なものがないのですか?
9 events 

1
STLはモバイルデバイスに対して十分効率的ですか?
iOSおよびAndroid NDKでのモバイルゲーム開発に関しては、一部の開発者は独自のC ++コンテナーを作成しますが、STLはモバイルゲーム開発に十分すぎると主張する開発者もいます(たとえば、iPhone 3Dプログラミングの作者は、目的ではなくSTLを使用しています-彼の例ではCです。彼の弁護は、STLがObjective-Cより遅くないことです。 次に、C ++を完全に放棄し、C言語(C89 / C90)で完全に(またはほとんど)ゲームを開発するモバイル開発者もいます。 それぞれのアプローチの長所と短所は何ですか?

1
波紋効果?
タワーディフェンスゲームに取り組んでいますが、これまでのところ、結果に本当に満足しています。ただし、追加したいことが1つあります。 Windows Phone 7のGeoDefenseのビデオをここで見ました:http : //www.youtube.com/watch? v=YhPr4A4LRPQ (ユニットが殺されるか、発射体がユニットに当たったとき)背景がなんらかの波効果で波打つ様子に注目してください。 どうすれば同等のものを作ることができますか?多くの頂点で構成されるクワッドを使用して、頂点シェーダーで何とかする必要があると思います。 あなたの電話は何ですか? 編集 XNAゲームはWindows Phone用ではなく、Windows PC用に作成されていることに注意してください。
9 xna  c#  hlsl 

3
ゲームを開発するときに、iOS 3.xまたはiPhone 3Gデバイスをサポートする価値はありますか?
ゲーム開発者が古いデバイス(iPhone 3G以前)をサポートしたり、古いOS(iOS 3.x以前)をサポートしたりする価値はまだありますか?または、サポートされているOpenGL ES 2.0をiPhone 3GS以降で使用することをお勧めしますか?以前のバージョンのデバイス/オペレーティングシステムを使用しているユーザーの割合を知っていますか?
9 iphone  opengl-es  ios 

2
ブリッティング速度を上げますか?
私はPyGameの2Dサイドスクローラーで作業しています。マップごとに1つのテクスチャを使用します(これはテクスチャの実際のサイズです)。 次に、次のコードを使用して画像を読み込みます。 sprite = pygame.image.load("Maps/MapTesting.png") sprite.convert() sprite = pygame.transform.scale(sprite, (sprite.get_width()*6, sprite.get_height()*6)) ご覧のように、テクスチャは6回爆破されて実際のマップテクスチャが作成されます。平均して、このテクスチャは約4500x800です。画面全体が汚れているため(横スクロールのおかげで)、このテクスチャはフレームごとに画面にブリットする必要があります。これは次のコードを使用して行います。 screen.blit(sprite, (0, 0), (cameraposx, cameraposy, windowheight, windowwidth)) そしてそれは機能します。問題は、それがかなり遅いということです。まともなPCでわずか40 FPSを取得します。60FPSを目指しているのに、実際のAI /オブジェクトが何も実行されていません。どうすればこれをスピードアップできますか? 上記のコードはサニタイズされ、コンテキストから除外されていることに注意してください。完全なコードはここにあります:https : //github.com/nightcracker/PyGG2 最後に重要なことですが、上の画像は8ビットのように見えるかもしれませんが、ゲームにはより多くのビット深度を必要とする要素があります。
9 pygame 

3
イベントシステムを設定するより良い方法はありますか?
イベントシステムは驚くべきものであり、非常に扱いにくいコードを飼いならし、オブジェクトとゲームループの簡単な通信を通じてゲームの動的な作成を可能にします。現在の実装の効率に苦労しています。現在、オブジェクトのリストをそれらが応答するイベントに分離するという私のわずかな最適化は不思議に思っていますが、私ができることがもっとあるはずです。 現在、私は2つの方法があります: 最も単純:イベントが送信されると、すべてのオブジェクトがベクターに追加されます。すべてのオブジェクトには、handle_event()メソッドを介してイベントが送信されます。 より複雑:キーが文字列、値が整数のマップがあります。イベントタイプが追加されると、それはこのマップに追加され、intは単純にインクリメントされます(より良い方法が必要 です)。次に、オブジェクトのベクトルのベクトルが新しいベクトルを押し戻し、そのタイプのイベントを処理します。 イベントが呼び出されると、eventTypesマップの対応するintをオブジェクトのベクターのベクター内の型に呼び出し、そのイベントタイプを処理する各オブジェクトにそのイベントを送信します。 これらの最初の方法は、多くのオブジェクトに対して(明らかに)非常に低速ですが、非常に少数のオブジェクトに対しては非常に高速です。2番目の方法は、異なるタイプのイベントを処理したい大きなオブジェクトでは非常に高速ですが、同じタイプのイベントを処理するオブジェクトを使用するオブジェクトごとの最初の方法よりも低速です。 より速い(実行時間に関して)方法はありますか?文字列型からintを検索するより速い方法はありますか?(最初は列挙型がありましたが、必要なレベルのダイナミズムのために必要なカスタム型は許可されていませんでした。)

2
プログラマーがゲームエンジンを開発するために知っておくべき具体的な数学、物理学、AI、および一般的な概念は何ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 WebおよびDB中心のアプリケーションのプログラマーである私は、リスト、ツリー、グラフなどのデータ構造に関する知識を持っています。私は、これらのデータ構造アルゴリズムのほとんどをコーディングで使用します。すべてのコア機能が組み込まれたクライアント指向のフレームワークでほぼ完全に機能しました。C、PHP、Java、HTML、PL / SQL、MySQLを知っています。私は現在Pythonを学んでいます。 ゲーム開発から始めたい。初心者向けのゲーム開発への提案、ヒント、アプローチに関する他の質問を見てきました。私はこれらの点を理解しており、答えは明らかです。投稿してから数日後、記事「エンジンではなくゲームを書く」を読み、ゲームエンジンを作成する前にゲームを実装する必要があることに気付きました。それでも、質問があります。 私の目的は データ構造アルゴリズム、数学、物理学の概念の使用など、コアレベルのプログラミングスキルを向上させます。 優れたゲームエンジンを実装して、コアレベルのコーディングに身を任せます。 AI研究分野への道を開くため。 プログラマーがゲームエンジンを開発するために知っておくべき具体的な数学、物理学、AI、および一般的な概念は何ですか?

1
glBlendFuncによるCocos2Dのブレンドモード
私たちは、PhotoshopとQuartz 2Dで利用できる最も一般的な描画モードを再現しようと試みてきましたが、3つしか考え出せませんでした。 興味のある人のために、ここにあります: 乗算 = GL_DST_COLOR、GL_ONE_MINUS_SRC_ALPHA 画面 = GL_MINUS_DST_COLOR、GL_ONE 線形覆い焼き= GL_ONE、GL_ONE これらのモードやその他のモードをオンラインで試すことができます。この非常に便利なWebサイトhttp://www.andersriggelsen.dk/glblendfunc.php 私たちのOpen GLエクスペリエンスは本当に非常に制限されているため、Cocos2D内で再作成できる追加のブレンドモードを提供していただければ幸いです。 前もって感謝します! アルギリス

2
メッシュをアンラップするときにすべてのエッジをシームとしてマークすることの欠点は何ですか?
私は少し基本的な3Dモデリングを学ぼうとしているプログラマーです。基本的なジオメトリモデリングにはかなり慣れており、シンプルなモデルを展開してテクスチャリングできます。でも質問があります... モデルのアンラップに関しては、すべてのチュートリアルで、メッシュをアンラップするときに継ぎ目をできるだけ少なくマークする必要性を強調しています。私の質問は、なぜですか?これはモデリングの経験がある人にとっては非常に明白だと思いますが、私にとってはそうではありません(私のテクスチャリングの取り組みが主にAOまたは法線マップの生成に制限されている場合)。 拡散テクスチャの編集に関しては、モデルの形状を保持することだけに関係していると思いますか?すべてのエッジを単純にカットしてすべての面を個別にレイアウトしたくないのは、それが唯一の理由ですか? この質問をするとき、私は主題をまったく知らないように見せているので、申し訳ありませんが、butへの答えを見つけるのが非常に難しいことがときどきあります。
9 models  blender 

2
ゲームセーブデータを圧縮する
多くの詳細データ(一部のエンティティの正確な軌跡)を外部ファイルに保存する必要があるゲームを書いています。ドライブのスペースと帯域幅を圧縮して節約したいのですが、これを行ったことがないので、適切な方法があるかどうかわかりません。 もちろん、圧縮解凍はゲームの速度にあまり影響を与えてはいけません。

1
C ++モデル読み込みAPI?
最も機能的なC ++モデル読み込みAPIを探しています。 これまでに、大量のply、obj、およびその他のそのようなファイル形式ローダーを見つけました。しかし、私が見つけたライブラリは1つのモデルタイプのみをロードする傾向があり、これにはかなりの数のAPIインターフェースを学習する必要がありますか? それらをすべてロードするための1つのAPI、それらを解析するための1つのAPI、それらをすべてもたらすための1つのAPI、そしてそれらを頂点バッファーにバインドしますか?
9 c++  models  loading 

3
ゲーム/グラフィックス開発の認定はありますか?
ゲームやグラフィックスの開発者向けに業界で認められている認定はありますか? 編集: 私は、Microsoft Certified Professional Developer(MCPD)またはCisco Certified Network Associate(CCNA)に似ていますが、ゲーム開発に固有のプロフェッショナル認定を考えています。
9 education  jobs 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.