ゲーム開発

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

1
Unityでオブジェクトのスプライトを変更する
ヒーロー(オブジェクト)のスクリプトコード内で、スプライトを変更する可能性を追加します。 プレーヤーがスペースボタンを押すと、スプライトはプロジェクトに既に追加されている他のスプライトに変わります。 これを行うためのサンプルコードを提供してもらえますか?
11 c#  2d  unity  sprites 

3
同じコンポーネントセットのエンティティを線形メモリにグループ化する
基本的なシステム、コンポーネント、エンティティのアプローチから始めます。 コンポーネントのタイプに関する情報だけから集合(この記事から派生した用語)を作成しましょう。これは、エンティティにコンポーネントを1つずつ追加/削除するのと同じように、実行時に動的に行われますが、タイプ情報のみを対象としているため、より正確に名前を付けましょう。 次に、それらすべての集合を指定するエンティティを作成します。エンティティを作成すると、その組み合わせは不変です。つまり、その場で直接変更することはできませんが、ローカルコピーへの既存のエンティティの署名を(コンテンツとともに)取得し、適切に変更して、新しいエンティティを作成できます。それの。 ここで重要な概念について説明します。エンティティが作成されると、それは常にassemblage bucketというオブジェクトに割り当てられます。つまり、同じ署名のすべてのエンティティが同じコンテナ(例:std :: vector)に置かれます。 現在、システムは関心のあるすべてのバケットを反復処理し、その仕事をしています。 このアプローチにはいくつかの利点があります。 コンポーネントは少数(正確にはバケット数)の連続したメモリチャンクに格納されます-これによりメモリの使いやすさが向上し、ゲーム全体の状態をダンプするのが簡単になります システムはコンポーネントを線形的に処理します。つまり、キャッシュの一貫性が向上します。さようなら辞書とランダムメモリジャンプ 新しいエンティティの作成は、アセンブリをバケットにマッピングし、必要なコンポーネントをそのベクトルにプッシュバックするのと同じくらい簡単です エンティティの削除は、std :: moveを1回呼び出して最後の要素を削除された要素と交換するのと同じくらい簡単です。現時点では順序は関係ないためです。 完全に異なるシグネチャを持つ多くのエンティティがある場合、キャッシュコヒーレンシの利点はある程度減少しますが、ほとんどのアプリケーションでは発生しないと思います。 ベクトルが再割り当てされると、ポインターの無効化にも問題があります。これは、次のような構造を導入することで解決できます。 struct assemblage_bucket { struct entity_watcher { assemblage_bucket* owner; entity_id real_index_in_vector; }; std::unordered_map<entity_id, std::vector<entity_watcher*>> subscribers; //... }; そのため、ゲームロジックの何らかの理由で、新しく作成されたエンティティを追跡したいときはいつでも、バケット内にentity_watcherを登録し、エンティティを削除中にstd :: moveする必要がある場合は、そのウォッチャーをルックアップして更新しますそれらreal_index_in_vectorを新しい値に。ほとんどの場合、これはエンティティの削除ごとに1回の辞書検索を課します。 このアプローチには他に不利な点はありますか? なぜ明白なのに、なぜ解決策がどこにも言及されていないのですか 編集:コメントが不十分であるため、「回答に答える」ために質問を編集しています。 静的なクラスの構築を回避するために特別に作成された、プラグ可能なコンポーネントの動的な性質を失います。 私はしません。多分私はそれを十分に明確に説明しなかった: auto signature = world.get_signature(entity_id); // this would just return …

3
ローグライクゲームの状態を保存していますか?
私はHTML5とjQueryを使用して基本的なローグライクに取り組んでおり、問題に遭遇しました。 現在のゲームの状態では、システムはユーザーがフロア間を移動するたびにゲームの状態のみを保存し、オーバーヘッドを最小限に抑えます。これの危険性は、ユーザーが問題を抱えた場合、ウィンドウを閉じて、現在のフロアの最初でゲームに戻ることができるということです。これにより、ゲームの難易度が大幅に低下します(ローグライクの目的をほとんど破ります)。 ブラウザウィンドウを閉じてゲームの状態を保存する方法を調査しましたが、満足できません。私の質問はこれです。「ゲームの状態を保存する」とは、適度に重いajax / postリクエストを意味すると仮定して、この不正行為を阻止するにはどうすればよいですか?マップ全体の状態を保存するのではなく、2Dマップへの増分/手順の変更を定量化する既知の方法論はありますか?私が「最も効率的な方法」を求めているのではないことに注意してください-私の経験不足を正すための既存の方法論を探しています。

2
エンティティ/コンポーネントベースのシステムでゲームの状態を構造化する方法
ここで説明するように、コンポーネント間の通信にシステムを使用するエンティティコンポーネントパラダイムで設計されたゲームを作成しています。開発の段階で、ゲームの状態(一時停止、再生、レベルスタート、ラウンドスタート、ゲームオーバーなど)を追加する必要がありますが、フレームワークでそれを行う方法がわかりません。私は誰もが参照していると思われるゲームの状態に関するこのコード例を見てきましたが、私のフレームワークに適合しないと思います。各州が独自の描画と更新を処理しているようです。私のフレームワークには、システムを使用してすべての更新を処理するSystemManagerがあります。たとえば、次は私のRenderingSystemクラスです。 public class RenderingSystem extends GameSystem { private GameView gameView_; /** * Constructor * Creates a new RenderingSystem. * @param gameManager The game manager. Used to get the game components. */ public RenderingSystem(GameManager gameManager) { super(gameManager); } /** * Method: registerGameView * Registers gameView into the RenderingSystem. * @param gameView …

3
等尺性衝突検出
2つのアイソメトリックタイルの衝突を検出しようとすると問題が発生します。 タイルの各ポイント間のラインをプロットしてからラインインターセプトを確認しようとしましたが、機能しませんでした(おそらく間違った式が原因です)。 今日しばらくこれを調べた後、私は多くのことを検討していると思います。もっと簡単な方法があるはずです。 私はコードを探していませんが、オーバーラップの検出を達成するための最良の方法に関するいくつかのアドバイス

2
NES時代のゲームで使用されているテクニックについてどこで読むことができますか?[閉まっている]
ここで何が質問されているのかを理解することは困難です。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 8年前休業。 NES時代のゲームで使われているテクニックについて読むのが好きです。このトピックに特化したブログやサイトはありますか? 例えば、ここでの記事ですパックマンの話、および他のゼルダの伝説の動きについては。
11 blog 



4
ゲーム力学パターンデータベース?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 http://tvtropes.orgを知っていますか? それは、物語のトーン、テレビ番組、ゲーム、本などで見つけることができる、シナリオ的なトロップ、パターンを備えた一種のwiki /データベースです。 各ロープ/パターンには(面白い)名前があり、それが表示される場所への参照があり、その逆の方法として、各本/ゲーム/などがあります。それが含んでいるtropesのリストを持っています。 私は同等のものを探していますが、「死は決定的」、「完全な物理的制御(慣性なし)」、「エクセルテーブルゲームプレイ」などのゲームメカニクスパターン用です。 本当に役立つと思います。ゲームメカニクスに相当するものが見つかりません(tvtropeはゲームメカニクスではなくシナリオ指向です)。 何でも知ってますか?

2
タイルマップとユニット間の依存関係を管理する方法
作品には2Dタイルベースの戦略があります。マップとマップ上のユニットとの関係をどのように処理するか迷っています。 タイルの座標を考えると、もしあれば、その上にユニットを立てられるようにする必要があります。同時に、ユニットが指定されている場合、そのユニットの座標を取得できるようにしたいと思います。 これに対する2つの解決策を見てきました。最初の解決策は、ユニットに座標を格納させ、マップにユニット参照をタイルに格納させることです。これにより、マップとユニットの間に循環依存関係が作成されます。ユニットが移動した場合、マップと任意のユニットが同期していることを確認する必要があります。 2番目の解決策は、ユニットに座標のみを追跡させることです。タイルにユニットが含まれているかどうかを確認し、そのユニットを取得するには、ユニットユニットのセット全体をループして、座標が一致するユニットを見つけます。これは循環依存関係を解消しますが、最初のソリューションがマップからユニットを検索するために持っていたO(1)プロパティを失います。これは、経路の検索、移動範囲の決定、特定のユニットの有効なターゲットの検索などの目的で定期的にマップをスキャンできるようにしたい場合に加算されます。 また、ユニットをマップに格納することもできません(または格納できますか?)。ユニットは、プレーヤーまたはAIの「軍隊」に関連付けられています。軍は、そのすべてのユニットに簡単にアクセスして反復できる必要があります。 これは戦略ゲームでは一般的な問題のようですが、ユニット/マップの関係を管理するために説明した2つのパターン以外に他のパターンはありますか?
11 tiles  maps  character 

4
減速を実装するにはどうすればよいですか?
現時点では加速を使用していないため、「減速」と言います。つまり、速度をゼロに戻し、最終的に停止します。 私はベクトルが初めてなので、物理学などはあまり得意ではありません。「減速」は通常どのように処理されますか? 私が今持っているものは動作しますが、一種のハックのようです。 update:function(Game, t, dt) { var speed = Game.Input.isKeyDown('shift') ? 8 : 4; if (Game.Input.isKeyDown('a')) { this.velocity.i -= speed; } else if (Game.Input.isKeyDown('d')) { this.velocity.i += speed; } else { if (Math.abs(this.velocity.i) > 3) { this.velocity.i += (this.velocity.i > 0) ? -speed : speed; } else { this.velocity.i …

2
2D Vectorクラスのフロート、ダブル、または両方?
私は現在、スタジオ用の小さなクロスプラットフォームのOpenGLベースの2Dゲームエンジンを書いています。使用する2D Vectorクラスを調査したとき、3つの異なる設計パラダイムに出くわしました。 このガマスートラの記事のように、フロート&値渡し。高速に見えますが、精度はほとんどありません(このThreadも参照してください)。プロ:高速でポータブルで、ほとんどのライブラリと互換性があります。 参照による二重呼び出し。上記の記事を正しく理解していれば、4つの浮動小数点数の代わりに2つの倍精度変数を使用することもできます。上記のスレッドによると、ダブルはフロートよりも遅いです。 doubleとfloatのテンプレート:広く普及している本「Game Engine Architecture」では、テンプレートを使用して、必要に応じてfloatとdoubleを使用できるようにしています。明らかな欠点は、コードの膨張です。また、基本的に2つのクラスを記述せずにコードを最適化できるかどうかは疑問です。 社内エンジンで使用しているソリューションや、人気のあるゲームエンジンなどの精度を確認していただければ、エンジンに実装するソリューションを決定できます。現時点では、単純に浮動小数点精度を使用してそれと共存することを考えています。

2
プレーヤーを地形に対してスムーズにスライドさせる方法
等尺性のゲームを作っています。プレイヤーが斜めに壁の中を歩こうとするとき、スムーズに壁を横切って滑らせたいので、動きのどの部分でも合法であり、法線の方向のすべてが捨てられます。壁は垂直または水平だけでなく、任意の角度にすることができ、プレーヤーは360度の動きをします。 もうすぐそこにいるような気がしますが、最後のピースを置くことができません。 更新:みんな良いニュースです!私はそれを働いています。しかし...私は正規化すべきこととそうでないことを少し混乱しています。法線は単位ベクトルである必要がありますよね?しかし、それを私の入力と混合しているので、それを正規化しています-私は間違っていますか? ちなみに、プレイヤーが通常の方向に1ピクセル押す必要があることもわかりました。これにより、プレイヤーが物に引っ掛からないようになり、うまく機能します。

3
なぜ腕を伸ばした「バインドポーズ」なのか?
よく気になったのが「バインドポーズ」。人間のスケルトンのバインドポーズは、脚がまっすぐで、腕が体に垂直なポーズです。 私の質問は:なぜですか?そのようなポーズは、アニメーター、またはプログラマー、あるいはその両方と一緒に作業する方が簡単ですか?数学を理解している限り、バインドポーズは結果に影響を与えません。

5
クロスプラットフォームの低レベルグラフィックAPI
システムの抽象化を作成する場合、プラットフォームのさまざまなAPIを、意味のある最低レベルの共通インターフェースによって非表示にすることをお勧めします。 さまざまな最新(固定関数パイプラインなし)のネイティブグラフィックAPIを考慮に入れる:OpenGLES 2.0 +、OpengGL 3.0 +、DirectX 10.0 +、Xbox DirectX 9、LibGCM ステートレスな低レベルグラフィックAPI を作成してそれらすべての上に配置する場合、それを可能な限り薄く、高速にするために最適な方法は何でしょうか。

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