ゲーム開発

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

7
経験値に基づいてレベルを動的に計算するアルゴリズム?[閉まっている]
私がゲーム開発で常に経験した苦労の1つは、レベルを上げることに起因する経験値を実装する方法を決定することです。私がプレイした多くのゲームでレベルを獲得するパターンはないようですので、経験点とレベルを含む静的な辞書テーブルがあると思います。例えば Experience Level 0 1 100 2 175 3 280 4 800 5 ... 280ポイントがレベル4に等しい理由や理由はありません。 これらのレベルがどのように決定されるかはわかりませんが、それは確かに動的ではありません。また、指数レベルの可能性についても考えました。たとえば、別個のルックアップテーブルを保持する必要はありません。 Experience Level 0 1 100 2 200 3 400 4 800 5 1600 6 3200 7 6400 8 ...しかし、ゲーム内の敵はレベルを上げるために途方もない量の経験を提供する必要があるため、それはかなり急速に制御不能になりそうです。レベリングは不可能な作業になります。 経験に基づいてキャラクターを平準化する方法を決定するためのポインターやメソッドを持っている人はいますか?レベリングを公平にしたいので、常に新しい経験/レベルルックアップを追加することを心配しないように、プレーヤーの先を行きたいです。

4
なぜ最近のゲームでは、ミラーにレンダリングからテクスチャへのアプローチを使用するのですか?
Mario64やDukeNukem3Dなどの古いゲームを見ると、ゲーム内のすべてのミラーは基本的に壁の穴であり、ミラーの前にあるジオメトリのミラーコピーが背後に置かれています。DukeNukem3Dの場合は、ノークリップをアクティブにして、ミラーリングされた部屋に入ることもできます。 対照的に、最新のゲームでは、ミラーにレンダリングからテクスチャへのアプローチを使用しています。これにより、ミラーを近づけると、ミラーが著しくピクセル化されます。このアプローチに気付いた最初のゲームの1つはLuigi's Mansionでしたが、ほとんどすべての現代のゲームで使用されているようです。 最近、ハードウェアまたはエンジンにどのような変更が加えられ、2番目のアプローチが非常に支配的になりましたか?また、その利点は何ですか?純粋なビジュアルに関しては、ピクセル化の問題がないため、最初のアプローチが優れているようです。
40 3d  rendering 


3
手続き的に生成されたマップで湾と海峡をどのように決定できますか?
ボロノイセルを使用して、定義済みの海面と信頼できる高さマップを使用して、手順で生成されたマップを取得しました。 これまでのところ、土地、海、湖、川、河口、合流点、山、バイオームなどの特定の地理的特徴のラベル付けに成功しています。バイオームにはツンドラ、寒帯林、草原、温帯林が含まれます。他にもいくつかのバイオームがありますが、私の目的にとっては今のところ重要ではありません。 次に湾と海峡にラベルを付けたいのですが、これを適切に行う方法に迷っています。湾とは、海に直接つながる窪んだ沿岸の水域です。 海峡は、海の2つの部分を結ぶ自然に形成された狭い水路です。基本的に、2つの土地がほとんど接触しており、両側に海があります。「チャネル」とも呼ばれます。 機能を決定するには、次のようにタイプ別に機能をループします。 for each (var feature:Object in geography.getFeaturesByType(Geography.LAND)) // loop through lands for each (var cell:Cell in feature.cells) // loop through cells for each (var neighbor:Cell in cell.neighbors) // loop through a cell's neighbors trace(neighbor.hasFeatureType(Geography.LAND));

9
プレイヤーにレベルを完了するチャンスがないことを伝える必要がありますか?
プレイヤーが現在のレベルを完了する可能性がまったくないポイントに到達し、それを再起動して再試行する必要があるとします。 レベルを継続しても何も得られず、再起動する必要があることを通知する必要がありますか?もしそうなら、どのように彼らにそれを伝えるべきですか?「チャンスはありません。もう一度やり直してください」のようなメッセージボックスがあればいいのでしょうか。それとも、彼らにプレイを続けさせ、自分自身を見つけさせるべきですか? レベルはそれほど大きくないことに注意してください。ほとんどの場合、完了には約1分かかります。たとえば、ユーザーが30秒程度後にレベルアップする機会を逃した場合、ゲームを停止して再起動する必要がありますか?

13
オンラインプレーヤーと対話するオフラインプレーヤーの永続的な要素
長い間、私は非常に抽象的なゲーム設計の問題について考えていましたが、それに対する良い解決策はまだ見つかりませんでした。要約すると、所有しているプレイヤーがオフラインで入力を行えない間、プレイヤーは永続的なマルチプレイヤーの世界でベース、ユニット、インフラストラクチャを所有し、他のプレイヤーとやり取りしたり攻撃したりできますか? 具体例として: 非常に大きな2Dワールドがあり、そこに拠点を構築し、ユニットがそれらを守ることができると仮定します。拠点は、ベンダーを代表する自動取引ステーションとして他のプレイヤーが訪問または使用できます。しかし、基地は敵対的なプレイヤーによって争われることもできるはずです-それは略奪であれ完全な破壊であれ。 攻撃中に基地の所有者がオフラインになるという問題を解決するにはどうすればよいですか?または、プレイヤーが通常オンラインでないとき(睡眠、仕事、学校)にプレイヤーが攻撃しますか?または、プレーヤーが潜在的な保護メカニズムを悪用するために積極的にオフラインになったり、オフラインになったりすることはありますか?そのような保護を維持するために、特定の時間範囲で特定の時間、プレーヤーを強制的にオンラインにしないようにするにはどうすればよいですか? アイデア(ただし、満足のいくものではありません): 基地は通常の方法では攻撃できません。人々は、他のプレイヤーがオプションの入力を行えることを保証するのに十分な長さの遅延で「部隊」を送信できます。これらの戦いの結果は、自動的に計算された結果です。そのような包囲は、数日間にわたって行われる場合があります。 基地を攻撃できるのは、所有者がオンラインになっている場合、または長期間オフラインになっている場合のみです。なぜそれらが攻撃されないのかという説明はひどく欠けています-取引がまだ可能であるべきだということを考えると。 プレイヤーが攻撃しようとするとき、両方のプレイヤーは何らかの形でオンラインになり、戦闘を開始するために予約をしなければなりません。これは明らかな理由で悪い解決策です。 所有者がオフラインまたは非アクティブに設定している間、ベースは非アクティブで不死身であり、取引/その他のアクティビティは以前のオンライン/アクティブ時間に基づいて一時的にのみ継続します。これは、基本的に非表示または非表示にする必要があり、アクセスできないようになることで他のプレーヤーに迷惑がかかる可能性があるため、可視ベースと進行中のインフラストラクチャで問題が発生します。 永続的な要素を使用してこのオンライン/オフラインの問題に取り組むために、他にどのような方法論が存在するか、採用できるでしょうか?また、数学的または体系的な解決策も提供しています。他のプレイヤーもどちらかの側を支援できるべきであり、彼らのオンライン/オフラインの時間も同様に考慮する必要があることを思い出してください。

6
2Dゲームの大きなビデオメモリ要件をどのように解決しますか?
2Dゲームの大きなビデオメモリ要件をどのように解決しますか? Allegro C / C ++で2Dゲーム(Factorio)を開発していますが、ゲームコンテンツの増加に伴い、ビデオメモリ要件が増加するという問題に直面しています。 現在、最初に使用される画像に関するすべての情報を収集し、これらの画像を可能な限りすべてトリミングして、可能な限り緊密に大きなアトラスに整理します。これらのアトラスはビデオメモリに保存され、そのサイズはシステムの制限に依存します。現在、通常は最大8192x8192の2つの画像であるため、256Mb〜512Mbのビデオメモリが必要です。 このシステムは、カスタム最適化とレンダリングスレッドと更新スレッドの分割により、60 fpsで何万枚もの画像を画面に描画できるため、非常に有効です。画面には多くのオブジェクトがあり、大きなズームアウトを許可することが重要な要件です。さらに追加したいので、ビデオメモリの要件に問題が発生するため、このシステムは保持できません。 私たちが試したかったことの1つは、最も一般的な画像を含む1つのアトラスと、キャッシュとしての2つ目のアトラスを持つことです。画像は、必要に応じてメモリビットマップからそこに移動されます。このアプローチには2つの問題があります。 allegroでは、メモリビットマップからビデオビットマップへの描画が非常に遅くなります。 allegroのメインスレッド以外でビデオビットマップを操作することはできないため、実際には使用できません。 追加の要件は次のとおりです。 ゲームは決定論的である必要があるため、パフォーマンスの問題や読み込み時間によってゲームの状態が変わることはありません。 ゲームはリアルタイムであり、すぐにマルチプレイヤーにもなります。どんなコストでも最小のスタッターでさえ避ける必要があります。 ゲームのほとんどは、1つの連続したオープンワールドです。 このテストは、1x1から300x300までのサイズのバッチで、構成ごとに数回、10,000個のスプライトを描画することで構成されていました。Nvidia Geforce GTX 760でテストを行いました。 ソースビットマップが個々のビットマップ(アトラスバリアント)間で変更されていない場合、ビデオビットマップからビデオビットマップへの描画はスプライトごとに0.1usかかりました。サイズは関係ありませんでした ビデオビットマップからビデオビットマップへの描画、ソースビットマップの描画間での切り替え(非アトラスバリアント)は、スプライトごとに0.56usかかりました。サイズも関係ありませんでした。 メモリビットマップからビデオビットマップの描画は本当に疑わしいものでした。1x1から200x200のサイズはビットマップあたり0.3usかかったので、それほどひどく遅くはありません。サイズが大きくなると、201x201の9usから291x291の3116usへと、劇的に時間の増加が始まりました。 アトラスを使用すると、パフォーマンスが5倍に向上します。レンダリングに10ミリ秒かかっていた場合、アトラスを使用すると、フレームあたり100,000スプライトに制限され、それなしでは、20000スプライトの制限があります。これには問題があります。 また、シャドウのビットマップ圧縮と1bppビットマップ形式をテストする方法を探していましたが、Allegroでこれを行う方法を見つけることができませんでした。

1
GLSL:floatをintにキャストするにはどうすればよいですか?
GLSLフラグメントシェーダーで、にキャストしようとしfloatていintます。コンパイラはエラーを発生させます: ERROR: 0:60: '=' : cannot convert from 'mediump float' to 'highp int' の精度を上げてみましたint: mediump float indexf = floor(2.0 * mixer); highp int index = indexf; しかし、無駄に。 どうすればint適切にキャストできますか?
40 opengl  glsl  opengl-es 

9
ゲームのバランス/公平性を計算したり、数学的に証明したりすることは可能ですか?
この質問は、ビデオゲームではなくゲーム全般に焦点を当てています。昨日、ボードゲームの見本市に行き、ゲームの公正さを計算する方法があるかどうかを自問しました。確かに、それらのいくつかは幸運のかなりの部分を必要としますが、いくつかのキャラクターが圧倒されているかどうかを計算することが可能かもしれません。特にロールプレイングゲームやトレーディングカードゲームで。たとえば、「マジック:ザギャザリング」の作成者は、印象的な数の利用可能なカードがあるため、「すべてを打ち負かす1枚のカード」がないことをどのように確認できますか?

5
Androidが一時停止したときにOpenGLコンテキストが失われる回避策はありますか?
Androidのドキュメントには次のように書かれています: EGLレンダリングコンテキストが失われる状況があります。これは通常、デバイスがスリープ状態になってから起動したときに起こります。EGLコンテキストが失われると、そのコンテキストに関連付けられているすべてのOpenGLリソース(テクスチャなど)が自動的に削除されます。レンダリングを正しく維持するために、レンダラーは、必要な失われたリソースを再作成する必要があります。onSurfaceCreated(GL10、EGLConfig)メソッドは、これを行うのに便利な場所です。 ただし、OpenGLコンテキストですべてのテクスチャを再ロードする必要があるのは苦痛であり、一時停止後にアプリを再入力するときにユーザーのゲームエクスペリエンスが損なわれます。私は「Angry Birds」がどういうわけかこれを避けることを知っています、私は同じことを達成する方法についての提案を探していますか? 私はAndroid NDK r5(CrystaXバージョン)で作業しています。この問題に対するハッキングの可能性を見つけましたが、カスタムSDKバージョン全体のビルドを避けようとしています。

7
より良いアートを作成するための学習(2Dゲーム)
私のゲームの1つが「大きく」なるか、金塊があふれるまで、自分のゲームアートのほとんどまたはすべてを処理する必要があります。私の質問の核心は、「プログラマーアート」を超えて、私が実際に誇りに思う何かに到達するのに十分なアートをどのように学ぶことができるかということです。 私の質問の焦点は3Dではなく2Dです。 私はすでに良いグリップを持っています: Photoshop / GIMP(画像の操作と作成) フラッシュ(アニメーションおよびシンプルアートの描画) 簡単な描画(手で) 手描きアートのデジタル化 グラフィックデザイン ただし、ゲームには複雑で多様なアートが必要です。背景からアイコン、スプライト、アニメーション、複雑な効果まで何でも。 芸術的にギャップを埋めるにはどうすればよいですか?私はそれができるという経験と自信をすでに持っています。私は自分のささやかな努力をする方向を知る必要があるだけです。特に長期的には、これが報われることを知っています。しかし、私はそこに着く方法がわかりません。 既存のアートを使用することは、私がすでに行っていることですので、質問でそれを取り上げないでください。
40 2d  art 

5
サイズが2の累乗でないテクスチャを使用する必要がありますか?
OpenGLとDirectXの初期の頃、テクスチャサイズは2のべき乗である必要がありました。これは、シフトなどを使用して、フロート値の補間を非常に迅速に実行できることを意味していました。 OpenGL 2.0(およびその前の拡張機能)以降、2のべき乗以外のテクスチャディメンションがサポートされています。 2のべき乗のテクスチャは、最新の統合されたディスクリートGPUでパフォーマンス上の利点がありますか?2のべき乗以外のテクスチャにはどのような利点がありますか? かなりのデスクトップ人口に、2のべき乗以外のテクスチャをサポートするカードがありますか?

4
Goでゲームを開発していますか?[閉まっている]
Googleの新しいGo言語はまだ初期段階にあり、実際の使用やサポートがまだ普及していない。それでも、有望な実験のように思われ、ゲーム開発に未来があるのではないかと思います。私は他の場所でGoのゲーム固有の議論を見つけることができず、CWの議論が適切であると考えました。 いくつかの考え: golang.orgによると、Goプログラムは「同等のCまたはC ++コードとほぼ同じ速さで実行されます」-十分に速いですか? Goのガベージコレクションはゲームに適していますか? 並行ゴルーチンの土地でゲームを作成するためにどれだけの精神的な再調整が必要ですか? Goは「システム」レベルの言語と呼ばれることが多く、サーバーソフトウェアが例として挙げられています。これを聞いたときに、マルチプレイヤーゲームサーバーを考えないことは困難です。 あなたの考え?
40 go 

3
同じアーキテクチャの新しいプロセッサ用にエンジンを最適化する必要があるのはなぜですか?
新しいプロセッサ世代がリリースされると、ほとんどのWebサイトは、ゲームエンジンとプログラムを新しいハードウェア用に最適化する必要があると報告しています。理由はよくわかりません。通常、プロセッサには、使用する命令セットの種類を定義するアーキテクチャがあります。私たちが最近使用しているのはamd_x86_64です。すべてのプロセッサがこの同じアーキテクチャを使用している場合、プログラムまたはコンパイラを更新する必要があるのはなぜですか?マシンコードの実行を最適化する新しいプロセッサのパイプライン内には確かに機能がありますが、アーキテクチャがそうでない場合にマシンコード自体を変更する必要があるのはなぜですか?
39 hardware  cpu 

4
あるゲームのアイデアが別のゲームのアイデアよりも追求する価値があるかどうかを知る方法は?
現在、私は複数のプロジェクトの間に立ち往生しています(光沢のあるオブジェクト症候群はありません)私はいくつかのゲームのアイデアを持っています。このような状況に対処する方法について、他の誰かのアイデアを聞くのが助けになると思っていました。 ゲームプロジェクトのアイデアを選択するにはどうすればよいですか?

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