タグ付けされた質問 「xna」

XNAはMicrosoftによるゲームフレームワークで、Windows、Windows Phone、Xbox 360への展開を可能にします。

2
WPFでXNAを使用する方法
XNAを使用して一部のグラフィックスをWPFアプリのウィジェット/コントロールにレンダリングするにはどうすればよいですか?具体的には、XNAグラフィックウィンドウ内にWPFコントロールは必要ありません。レベルエディター用にいくつかのコントロールを配置するだけです。
8 xna  c#  wpf 

2
Xbox 360向けのWindowsでのみXNAでゲームを開発できますか?
Xbox 360用のゲームの開発を開始します。これは小さな自作の開発であり、Xbox 360はまだありません。Windows上のXNAフレームワークを対象としたゲーム全体を開発し、最後に「Xbox 360のプロジェクトのコピーを作成」して、問題なく動作させることは可能ですか? 私が遭遇する問題は何ですか?開発中にXbox 360をターゲットにして展開することを推奨するのはなぜですか?開発中にXbox 360が本当に必要ですか? 見事に構築されたTorque Xゲームエンジンの使用も計画しています。これは私のPCだけでも問題なく動作しますか?そして、多くのコードを変更せずにXbox 360に移行しますか?

5
IDを使用して異なる場所で同じゲームエンティティの複数の参照を管理する
私は同様のトピックについて素晴らしい質問を見てきましたが、この特定の方法に対処するものはありませんでした: [XNA Game Studio]ゲームにゲームエンティティの複数のコレクションがあり、多くのエンティティが複数のリストに属している場合、エンティティが破棄されるたびに追跡し、所属するリストから削除する方法を検討しています。 多くの潜在的なメソッドがずさんで複雑なように見えますが、以前に見た方法では、ゲームエンティティの複数のコレクションを使用する代わりに、ゲームエンティティIDのコレクションを使用する方法を思い出しました。これらのIDは、中央の「データベース」(おそらくハッシュテーブル)を介してゲームエンティティにマッピングされます。 したがって、コードの一部がゲームエンティティのメンバーにアクセスする必要がある場合は常に、まずデータベース内にあるかどうかを確認します。そうでない場合は、それに応じて反応します。 これは健全なアプローチですか?オブジェクトにアクセスするたびにルックアップのコストがかかるトレードオフで、複数のリストを格納することのリスク/手間の多くが排除されるようです。

1
RPGエンカウンターシステムの開発
XNA RPGの遭遇システムの真ん中です。アイデアは、ダンジョンを歩き回り、特定のタイルがRandomBattleTilesとして作成され、マップ内に、遭遇できるモンスターを定義する領域があるというものです。私が必要としているのは、モンスターがレベルを上げる方法と、それがどのようにステータスが増加するかをレイアウトする方法です。私はこれらの線に沿って何かを考えていました: <Species> <Name>MonsterA</Name> <ID>001</ID> <SpriteName>monstera_sprite</SpriteName> <Levels> <Level> <LevelID>1</LevelID> <Stats> <Attack>12</Attack> <Defense>10</Defense> <Speed>20</Speed> </Stats> <Moves> <Move ID="1" Level="2"/> </Moves> </Level> </Levels> </Species> これは適切でしょうか?移動も同様の定義パターンに従います。

3
XNAのパレットに基づいてテクスチャに色を付けるための良い方法は何ですか?
私はXNAを使用して、特にNESをガイドとして使用して、8ビットゲームのようなゲームに取り組んでいます。 NESには非常に特定のパレットがあり、各スプライトはそのパレットから最大4色を使用できます。これをどのようにエミュレートできますか?私がこれを達成する現在の方法は、GPUに渡す色の配列へのインデックスとして機能する定義された値を持つテクスチャーを持っていることです。これより良い方法があるに違いないと思いますが、おそらくこれが最善の方法でしょうか? パレットを動的に変更できるようにしたいので、すべてのスプライトを適切な色で描画することを確認したくありません。また、CPUを使用してテクスチャを直接変更したくない場合もあります。
8 xna  textures  palette 

2
Monogame(XNA)で大量のタイルを効率的に描画する
明確な答えが見つからないため、この質問をします。 まず最初に、ゲームといくつかのことについていくつか述べておきます。ゲームは、シンプレックスノイズを使用して手続き的に生成された世界に設定されたRTSになる予定です。世界は64 x 64のスプライトで作られた16 x 16のサイズのチャンクで構成されています。チャンクを動的にロードおよびアンロードできましたが、これは問題なく動作します。世界はRimworldのように見えるので、さまざまなレイヤーのスプライト(最初に地形、トランジションスプライト、木、デカールなど)を上から下に見ていきます。新しく生成された世界には、環境に影響を与える可能性のあるエンティティ(たとえば、町になった村)が含まれている場合があり、それによってチャンクが含まれる場合があります。これはある種の関数を使用して計算できると確信していますが、注意する必要があります。 主な問題私は持っているが、私はズームアウト時に、より多くのタイルがひどく、性能に影響を与える描かれています。スプライトが約30000の場合、描画セクションにかかる時間は8 msで、60 FPSで実行するのに必要な時間の半分です。そして、それは単なる地形です。テクスチャアトラスを使用して描画カウントを制限しています(6カウントで描画される30000スプライト)。 目標は、国全体を見ることができることに、町/村/都市レベルからすべての方法をズームアウトすることができることです。これは動的に行う必要があります(たとえば、ミニマップアイコンをクリックするのではなく、Supreme Commanderのようにスクロールバックするだけです)。 私はこの問題に関する多くの記事を読みましたが、それが機能する場所の明確な例を見つけたり、見たりしていません。これが私が見つけたテクニックのリストであり、うまくいくはずです: ここで説明するように汚れた長方形。ここでは新しいものだけを描画し、残りはバックバッファに保持します。これは非常に理にかなっていますが、Monogameでこれを実装する方法については無知です。 ここで説明するように、私が優先する選択は、RenderTargetを幅広く使用することです。ここでは、RenderTargetに描画し、それをテクスチャとして保存します。私の場合、64 x 64で構成される16 x 16チャンクは、1024 x 1024テクスチャを作成します。これがパフォーマンスの点で機能するかどうかは本当に疑わしいですが、結果は非常に詳細なテクスチャで構成され、ほとんどが静的(地形/木など)であり、それほど変化しないという事実を考えると使用に最適です。ただし、これは、チャンクに変更が加えられるたびに、SetDataを使用してTexture2Dを変更する必要があることも意味します。これは、私が経験したことから、CPUにかなりの負荷がかかります。ただし、テクスチャが16 x 16の場合、実際に機能する可能性があり、それ自体のメモリとディスク使用量も削減されます。 SpriteBatchでSourceRectangleを指定してテクスチャをティルします。巨大な草原/海では、1つのスプライトしか描画されないため、これはプラスです。ただし、さまざまな色とさまざまなスプライトが混在する詳細な地形(バイオームとバイオームの遷移)の場合、大きな違いは生じないと思います。 詳細を損なう私の独自のソリューションは、標準の白い64 x 64タイルを使用して、周囲の4つのタイルの色を指定し、次に、前の4つのタイルを覆うように拡大縮小することでした。ここでの違い(無地のタイルを除く)は、風景が目に見えて変化したことです。また、森林は完全に正方形ではないため、個別に描く必要があることにも触れておきます。 誰かがこの問題に取り組む方法についてアイデアを持っている場合、たとえそれが特定のことを妥協することを意味するとしても(ディテール、または16 x 16スプライトの使用など)、それを聞いてみたいと思います。

3
方向を変更すると、オブジェクトが遅くなり、新しい見出しで加速するはずです(2Dグリッドベース)。
私は2Dゲームにある種の偽の宇宙物理学を実装しようとしています。宇宙船を真上から見下ろしています。方向を変えて速度を最大に設定すると、船のエンジン加速量に応じてその方向に船が加速します。 船がゆっくりとその方向に動き始め、最高速度に達するまで速度を上げていくコードをうまく機能させています。 更新 答えは少し役に立ちましたが、それでも私の最終的な解決策にたどり着けません。理論を実用的なコードに変換することはできません。さらにいくつかのパラメータがあります: 2Dグリッドで作業しています 船のエンジンは1つで、出力を0から1に設定して、全出力を示すことができます。 エンジンに最高速度があります 偽の宇宙摩擦があり、船に電力を供給しなくなった場合、最終的に停止します。 問題 私が抱えている問題は、方向を変えるときです。300の速度で1つのヘディングで移動している場合、ヘディングを反対に変更すると、減速してその方向にその速度に戻るのではなく、設定された速度で瞬時に移動します。 望ましい状態 現在のコード public void Update(Consoles.Space space) { var GameTimeElapsedUpdate = (float)SadConsole.Engine.GameTimeElapsedUpdate; Graphic.PositionOffset = viewPortMaster.Position; // Update the engine ShipDetails.Engine.Update(); // Degrade the current velocity with friction?? if (velocity.Length() < 0f) { var accelerationFrame = ShipDetails.Engine.GetAccelerationFrame(); if (velocity.X > 0) velocity.X …
8 xna  c#  physics  monogame 

1
正射投影カメラを使用して上と下からレンダリングされた画像が一致しない
正射投影カメラを使用して、モデルのスライスをレンダリングしています(ボクセル化するため)。各スライスの内部を確認するために、各スライスを上と下の両方からレンダリングします。 私がレンダリングするモデルは、2つの立方体から構成される単純な「T」字型です。立方体は同じ次元を持ち、同じY(高さ)座標を持っています。Blenderでのレンダリングは次のとおりです。 このモデルを一度上から直接レンダリングし、一度下から直接レンダリングします。私の期待は、まったく同じ画像を取得することでした(y軸でのミラーリングを除く)。ただし、非常に低い解像度のレンダリングターゲット(25x25)を使用してレンダリングする場合、「T」の位置(ピクセル単位)は、下からレンダリングするのではなく、上からレンダリングしたときと異なります。図2と3を参照してください。ピンクのブロックは元のレンダリングの一部ではありませんが、簡単に数えたり、違いを確認したりできるように追加しました。 上からレンダリング 下からレンダリング これはおそらく私が読んだことによるものです 、カメラから見て左上にバイアスされている可能性のあるピクセル座標とテクセル座標についてです。私は両方のカメラに同じ「上」ベクトルを使用しているため、バイアスはx軸にのみ表示されます。私はカメラの位置を変えようとしました、そして、それは私が思っていたように、半ピクセルであるはずだと見ています。1台のカメラと両方のカメラの両方をシフトしてみましたが、一部の効果が表示されているのに、両方のカメラからピクセル単位の完全なコピーを取得できません。 ここで私はカメラを初期化し、私が信じているもの、ハーフピクセルを計算します。boundsDimXとboundsDimZは、モデルの周囲をわずかに拡大した境界ボックスで、正射投影カメラのビューボリュームの幅と高さとしても使用します。 Matrix projection = Matrix.CreateOrthographic(boundsDimX, boundsDimZ, 0.5f, sliceHeight + 0.5f); Vector3 halfPixel = new Vector3(boundsDimX / (float)renderTarget.Width, 0, boundsDimY / (float)renderTarget.Height) * 0.5f; これは、カメラの位置とカメラの視点を設定するコードです // Position camera if (downwards) { float cameraHeight = bounds.Max.Y + 0.501f - (sliceHeight * i); Vector3 cameraPosition = …
8 xna  c#  directx  texel 

3
再利用可能なトップダウン衝突クラス
私は最近、モノゲームを始めて、簡単なトップダウンゲームに取り組んでいます。 マウスを追跡するための動きと回転を整理しましたが、衝突に悩まされています。 私が知りたいのは、基本的に次の2つです。 衝突を処理する最良の方法は何でしょうか?Rectangle.Intersects(Rectangle1, Rectangle2)重なり合う四角形が返されることはわかっていますが、上から下への移動はx / y軸上にあるため、衝突が発生している場所を知りたいので、プレーヤーが取得しないような「壁のスライド」を作成できます壁で立ち往生。 プレーヤーのx / y座標をソリッドオブジェクトの座標と照合して確認し、ソリッドオブジェクトの境界に入る場合は、プレーヤーを以前の位置にスローしますか?あなたは何を提案しますか? すべてのソリッドやnpcなどに衝突を適用する最良の方法は何でしょうか?私は現在gameObject、すべてのオブジェクトが継承するクラスを作成し、そこで衝突を処理することを考えています。 読んでくれてありがとう、誰かが私にいくつかのヒントをくれることを願っています。

1
XNA 4.0ゲームへの水のエフェクト(スプラッシュ)の実装[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 6年前休業。 私は2D XNAゲームを作成していて、XNAゲームにウォーターエフェクト(スプラッシュ)を追加するチュートリアルに出会いましたが、それをゲームに実装した後、縮小することができません。現在、画面全体を占めています。 Waterクラスは次のようになります class Water { struct WaterColumn { public float TargetHeight; public float Height; public float Speed; public void Update(float dampening, float tension) { float x = TargetHeight - Height; Speed += tension * x - Speed * dampening; Height += Speed; } } PrimitiveBatch …
8 xna  c#  2d  xna-4.0  water 

3
Vector3対Vector2-パフォーマンス、使用法?
私は現在XNAをいじって、シンプルな2Dプラットフォーマーを作成しています。複数のレイヤーを追加して少し挑戦することを考えていました。 Vector2自分の位置にを使用する代わりに、を使用してVector3、Zレイヤーの深さとしてのみ使用します。ただし、不明な理由[1]の間Vector2で演算子を使用できないVector3ため、ゲーム内の他のすべての、たとえば、加速、速度、オフセットを変更して、エラーなしで実行できるようにしました。Vector2position += offset また、回転変数をからfloatに変更し、Vector3そのZ値を使用してテクスチャを回転させました。私が使用することを計画していますXし、Y規模フリップあなたはスーパーペーパーマリオ効果を得るので、私のテクスチャをします。 しかし、これらVector2のすべてをsで変更した後Vector3、私はそれについて少し気分が悪くなりました。これはゲームのパフォーマンスにどのように影響しますか?私の小さなプラットフォーマーゲームのパフォーマンスについて心配する必要はないはずですが、それだけに興味があります。 間の任意の顕著なパフォーマンスがありVector2sおよびVector3sがそれらを追加したり掛けるとき、たとえば、または呼び出すときNormalize、TransformまたはDistance? [1]余談ですが、Vector3とVector2の間の計算に演算子がないのはなぜですか?

1
マルチプレイヤーゲームのタイムステップ
サーバー/クライアントマルチプレーヤーエクスペリエンスを作成するというコンセプトに頭を悩ませています。 私の問題は主にタイムステップに関連しています。次のシナリオを検討してください。 クライアントはサーバーに接続します。クライアントは入力をサーバーに送信して、移動したいことを示します。サーバーは入力をシミュレートし、ゲームの世界におけるそのクライアントの位置を決定します。 クライアントとサーバーの両方が異なるタイムステップで実行されているため、すべてのクライアントがサーバーと同期するように正確にシミュレーションするにはどうすればよいですか?私のサーバーは現在30msのタイムステップに設定されています。クライアントの移動を処理するとき、潜在的に何百ものリクエストが処理されるのを待っていますが、各リクエスト間の時間を示す方法はありません。 すべてを同期させるために、時間に基づいてサーバー上で適切にシミュレートする方法を本当に理解していません。

1
奇妙な透明な穴がアーティファクトをレンダリングする
したがって、各サーフェスブロックにハイトマップを与えることにより、ブロックエンジンに「滑らかな」地形を実装しようとしています。 基本的に、各ブロックのこれらの「高さマップ」を生成するために私が行うことは、ブロックの端に沿って0.25の間隔で高さを生成することです。次に、ブロックの頂点を構築するために、高さをループして高さから高さに三角形を作成し、三角形の下に長方形を配置して次のようなものを作成します。 たとえば、ブロックのXの正側を作成するには、次のようにします。 Vector2[] uv = BlockUtil.UVMappings[(byte)side]; // uv[0] = top left float height; float nextHeight; float min; float tex_len = 1f / EngineGlobals.TEXTURE_ATLAS_SIDE; for (int i = 0; i < 4; i++) { height = (float)b.Heights[4, i] / 255f; nextHeight = (float)b.Heights[4, i + 1] / 255f; min = …

4
トップダウン2Dマップ上で画面外のオブジェクトを効率的にカリング
ゲームプログラミングでは効率が重要であることを知っています。以前に「マップ」をレンダリングした経験はありましたが、おそらく最善の方法ではありません。 2Dトップダウンゲームの場合:(世界のテクスチャ/タイルをレンダリングするだけです) たとえば、1000x1000(タイルなど)のマップがあるとします。タイルがカメラのビューにない場合、レンダリングされるべきではありません-とても簡単です。表示されないタイルをレンダリングする必要はありません。しかし、マップ内に1000x1000オブジェクトがあるか、おそらくそれより少ないため、レンダリングされるかどうかを確認するためだけにすべての1000 * 1000タイルをループ処理したくない場合があります。 質問:この効率を実装する最良の方法は何ですか?それで、「素早く/より速く」、どのタイルがレンダリングされると想定されるかを決定できますか? また、SpriteBatchでレンダリングされたタイルを中心にゲームを構築するのではないため、四角形はなく、形状はさまざまなサイズで複数のポイントを持つことができます。たとえば、10ポイントの湾曲したオブジェクトとそのシェイプ内のテクスチャです。 質問:この種のオブジェクトがカメラのビューの「内側」にあるかどうかをどのように判断しますか? 48x48の長方形で簡単です。X+ WidthまたはY + Heightがカメラのビュー内にあるかどうかを確認してください。複数のポイントで異なります。 簡単に言うと、何百万ものオブジェクトを同時に実行/ループする必要がないように、コードとデータを効率的に管理する方法です。

1
XNAでウィンドウのサイズ変更中にストレッチを停止するにはどうすればよいですか?
ウィンドウモードのXNAゲームでは、ユーザーがウィンドウのサイズを変更すると、ゲームがウィンドウの更新を停止し、ユーザーがマウスを離してサイズ変更が完了するまで、最後に描画されたフレームが引き伸ばされて変形します。 サイズ変更イベント中にゲームを「通常」に実行し続け、フレームを更新し、画面を再描画する方法はありますか? ハードウェア管理リソースが継続的に作成および破棄されるため、サイズ変更中にレンダーループを維持することは不可能または推奨されない可能性があることを理解していますが、醜いストレッチを停止する方法はありますか?理想的には、左上に既存のフレームを拡大縮小せずに残すか、それが不可能な場合は黒い画面にします。
8 xna  xna-4.0  .net 

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