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

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

7
ゲームにおける描画とロジックの分離
私は今、ゲーム開発をいじり始めている開発者です。私は.Netの男なので、XNAをいじり、iPhone用のCocos2dで遊んでいます。私の質問は本当にもっと一般的です。 簡単なPongゲームを作成しているとしましょう。私が持っていると思いますBallクラスとPaddleクラスを。ビジネスの世界の開発から来た私の最初の本能は、これらのクラスのいずれにも描画または入力処理コードがないことです。 //pseudo code class Ball { Vector2D position; Vector2D velocity; Color color; void Move(){} } ballクラスでは、入力を処理したり、描画を処理したりするものはありません。次に、別のクラス、私のGameクラス、またはScene.m(Cocos2dの)私がボールを新しくし、ゲームループ中に必要に応じてボールを操作します。 ただし、XNAとCocos2dの両方の多くのチュートリアルで、次のようなパターンが見られます。 //pseudo code class Ball : SomeUpdatableComponent { Vector2D position; Vector2D velocity; Color color; void Update(){} void Draw(){} void HandleInput(){} } 私の質問は、これは正しいですか?これは、人々がゲーム開発で使用するパターンですか?Ballクラスにすべてをやらせることは、私が慣れ親しんだことすべてに何らかの形で反します。さらに、この2番目の例では、Ball移動方法がわかっているので、Paddle?のBall知識が必要Paddleですか?私の最初の例では、Gameクラスは、両方への参照であろうBallとPaddle、その後、いくつかにそれらのオフの両方を出荷CollisionDetectionマネージャか何かが、各個々のコンポーネントは、それ自体で、すべてをしなければどのように私は、さまざまなコンポーネントの複雑さに対処するのですか?(私は私が理にかなっていると思います...)

3
2Dグリッド上のランダムな敵の配置
アイテムと敵をランダムに(またはできるだけランダムに)配置したい。現時点では、XNAのRandomクラスを使用して、Xの場合は800からYの場合は600の数値を生成しています。私はジェネレータをシードしません、多分それは考慮すべきことです。 2Dグリッドでのランダムな敵の配置を改善できる他のテクニックはありますか?
11 xna  2d  sprites  random 

2
XNAおよびXbox 360でのネットワークの可能性は何ですか?
Xbox 360のXNAはネットワーキングへのアクセスが制限されており、他のXbox 360ユニットへのマイクロソフトのプロトコルを介した通信のみを許可すると噂されています。 XNAが提供するネットワークの可能性は何ですか?同じサブネットにXbox 360ユニットをいくつ接続できますか?最大16ですか?Xboxはピアツーピア通信のようにサブネット上の他のXboxにデータを送信できますか?XboxはWindows PCのXNAと通信できますか?通信できる他のデバイスはありますか? そして、ゲームサーバーはどうですか?独自のマルチプレイヤーゲームサーバーをセットアップして、Xboxに接続して自由に通信させることはできますか?ゲームサーバーのコードはどのプラットフォームに記述しますか?Unix上のC ++?一度にいくつのXboxユニットがサーバーに接続できますか?独自のゲームサーバーをセットアップできない場合、インディーズの開発者がゲームサーバーを開発して実行できるようにする非公式の「ハック」はありますか? 私はXbox開発者ではない(つまり、$ 10000開発キットを所有していない)ため、ZoidcomなどのC ++ライブラリを使用できません。

5
XNAフレームワークはサーバー側プログラミングに適していますか?
テキストベースのMUDを作成しようとしているので、XNAフレームワークの要素の多くは、必要なものに適しているように見えます。特に一般的なゲームループ、ネットワーキングなどのようなものです。XNAはUIとオーディオを備えたインタラクティブな環境に密接に結合されているようです。そのため、適切な方法かどうかはわかりません。 これらの種類の側面を自分で再作成する方が簡単ですか、XNAフレームワークを必要なものに曲げようとするのですか、それともこのタイプの作業に適したフレームワークはありますか?
11 c#  xna 

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

4
LinuxのC#でゲームを作成できるフレームワークはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 5年前に閉鎖されました。 XNAの代替のようなものを探しています。2Dエンジンか3Dエンジンかは関係ありません。それは、私がWindowsが嫌いだったり、マイクロソフトに反対しているからではありません。それは、私がLinuxを実行するのが好きで、Linuxで完全にコード化する(C#の場合は明らかにMonoを使用する)ためです。ビデオカードが6歳であるという理由だけで、XNAでのプログラミングを実際にサポートするためのハードウェアがないわけです。また、DirectX 10用のWindows 7 / Vista CDも持っていません。 したがって、ゲーム開発に関しては、私は一種の石器時代に行き詰まっています。しかし、私はC#を非常に気に入っており、このため、C#を言語としてドロップする必要はありません。 何か私にできることはありますか?
10 xna  c# 

1
複数のライトによる高速照明
複数のライトで高速ライティングを実装するにはどうすればよいですか? プレイヤーを拘束したくありません。彼は無制限の数を配置でき、場合によっては重なっている(ポイント)ライトをレベルに配置できます。 問題は、ライティングの計算に必要な動的ループを含むシェーダーが非常に遅くなる傾向があることです。 コンパイル時にシェーダーをn回コンパイルすることが可能である場合、nはライトの数であるという考えがありました。コンパイル時に数値nがわかっている場合は、ループを自動的に展開できます。これは、異なる数のライトで同じシェーダーのnバージョンを生成することは可能ですか? 実行時に、レベルのどの部分にどのシェーダーを使用するかを決定できます。

4
「任意のボタンの押下」の検出
プレーヤーが任意のボタンを押してメインページから続行できるようにしようとしています。これを行うには、ボタンのリストを作成し、ボタンをループして、ボタンの1つがダウンしていないかどうかを確認しました。しかし、私はこのコードがちょっと醜いと感じ、私が考えていないより簡単な方法があるかどうか疑問に思いますか? これが私のコードが今どのように見えるかです: if (GamePad.GetState(PlayerIndex.One).IsConnected) { var buttonList = new List<Buttons>() { {Buttons.A}, {Buttons.B}, {Buttons.Y}, {Buttons.X}, {Buttons.Start}, {Buttons.Back}, {Buttons.RightShoulder}, {Buttons.LeftShoulder}, {Buttons.RightTrigger}, {Buttons.LeftTrigger} }; foreach (var button in buttonList) { if (GamePad.GetState(PlayerIndex.One).IsButtonDown(button)) ExitMainMenu= true; } }
10 xna  monogame 

1
レイヤー間にキャストされた2Dシャドウを実装するにはどうすればよいですか?
別のレイヤーのオブジェクトによってキャストされる2Dシャドウを実装するにはどうすればよいですか? Catalin Zimaの有名なチュートリアルの動的照明とは異なります。 しかし、このビデオのパイプの影のように: そして、このビデオのプラットフォームの影とキャラクターのように: 多くのレイヤーとさまざまな色の多くのライトがあるシーンで同じ種類のライティングを使用したいと思います。 レイヤーの背後にあるレイヤーの上にレイヤーの黒いコピーを描画し、影がキャストされているレイヤーの穴に応じて調整することで、これを想像できます。しかし、私はこれのためのより安価な、ピクセルシェーダーベースのアプローチがあることを願っています。

1
C#/ XNAハードウェアマウスの位置を取得
私はC#を使用していて、ハードウェアマウスの位置を取得しようとしています。最初に試したのは、使いやすいシンプルなXNA機能です。 Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y); その後、マウスの描画も行い、Windowsハードウェアマウスと比較して、xnaが提供する座標を持つこの新しいマウスは「ずれ」ています。つまり、数フレーム遅れているということです。たとえば、ゲームが600 fpsで実行されている場合、呪いは反応しますが、60 fpsのソフトウェアではマウスの遅延は許容できなくなります。そこで、ハードウェアマウスだと思ったものを使ってみました。 [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetCursorPos(out POINT lpPoint); しかし、結果はまったく同じでした。私はまた、Windowsフォームカーソルを取得しようとしましたが、これも行き止まりでした-動作しましたが、同じ遅延がありました。xna機能をいじくりまわす: GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false Game.IsFixedTimeStep = true/fale やや明白な理由で遅延時間を変更しましたが、肝心な点は、それがデフォルトのWindowsマウスの背後にあるにもかかわらずです。一部のゲームでは、ハードウェアアクセラレートマウスのオプションが提供されていることがわかりました。誰でもそれを達成する方法についていくつかのリードを与えることができますか?

2
定期的なXNAスタッター
ハードウェアのインスタンス化を実行しようとしていますが、奇妙なパフォーマンスの問題が発生しています。平均フレームレートは約45ですが、非常に不安定です。 窓付き SynchronizeWithVerticalRetrace = false IsFixedTimeStep = false PresentationInterval = PresentInterval.Immediate 下の画像は測定したタイミングを示しています(を使用Stopwatch)。一番上のグラフはDrawメソッドで費やされた時間で、一番下のグラフは終了からDraw開始までの時間ですUpdate スパイクはほぼ正確に1秒間隔であり、常に通常の時間の2、3、4、または5倍です。スパイクの直後のフレームにはまったく時間がかかりません。ガベージコレクタではないことを確認しました。 私は現在、100万のインスタンスを持つ12個の三角形と36個の頂点で構成されるメッシュを三角形リストとしてインスタンス化しています(最適ではないことを知っていますが、テスト用です)。インスタンス化の描画呼び出しを250インスタンスの小さな部分にバッチ処理すると、問題は軽減されますが、CPU使用率が大幅に増加します。上記の実行は、描画呼び出しごとに10000インスタンスです。これは、CPUではるかに簡単です。 全画面でゲームを実行すると、下部のグラフはほとんど存在しませんが、Drawメソッドで同じ問題が発生します。 これはPIX内での実行ですが、まったく意味がありません。一部のフレームではレンダリングが行われていないようです... 何か考え、これを引き起こしている可能性がありますか? 編集:要求に応じて、レンダーコードの関連部分 A CubeBufferが作成および初期化され、次にキューブで満たされます。キューブの量が特定の制限を超えると、新しいものCubeBufferが作成されます。各バッファは、1回の呼び出しですべてのインスタンスを描画します。 一度だけ必要な情報はstatic(頂点、インデックスバッファー、頂点宣言です。これまでのところ違いはありません)。テクスチャは512x512です ドロー() device.Clear(Color.DarkSlateGray); device.RasterizerState = new RasterizerState() { }; device.BlendState = new BlendState { }; device.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true }; //samplerState=new SamplerState() { AddressU = TextureAddressMode.Mirror, …
10 xna  performance 

1
スクリーンスペースからワールドスペース
私のゲームの世界では、x軸が左から右、y軸が上から下、z軸が画面の外に出ている2Dゲームを作成しています。 私のゲームの世界はトップダウンですが、ゲームは少し傾いてレンダリングされます。 私は、ワールドスペースからスクリーンスペースへ、またはその逆への投影に取り組んでいます。前者は次のように動作しています: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); NegateY()XNAのため、拡張メソッドは、それがのように聞こえるまさに行い、Y軸は、トップの代わりに、上から下へ下へと走ります。上のスクリーンショットは、これがすべて機能していることを示しています。基本的に、私は3D空間に多数のポイントを持ち、それを画面空間にレンダリングします。カメラのプロパティをリアルタイムで変更して、新しい位置にアニメーション表示することができます。明らかに、私の実際のゲームはポイントではなくスプライトを使用し、カメラの位置は固定されますが、それに到達する前に、すべての計算を適切に実行しようとしています。 今、私は逆に変換しようとしています。つまり、上の画面空間のxとyの点を指定して、ワールド空間の対応する点を決定します。たとえば、緑色の台形の左下にカーソルを合わせると、ワールドスペースの読み取り値は(0、480)になります。Z座標は無関係です。または、むしろ、ワールド空間にマッピングし直すとき、z座標は常にゼロになります。基本的に、私はこのメソッドシグネチャを実装したいと思います。 public Vector2 ScreenPointToWorld(Vector2 point) 私はこれを機能させるためにいくつかのことを試みましたが、運が悪いだけです。私の最新の考えでは、Viewport.Unproject異なるz値とfar z値を使用して2回呼び出し、結果を計算Rayし、それを正規化してから、基本的に私の世界の地上レベルを表すRayとの交差を計算する必要がありPlaneます。しかし、私は最後のステップで立ち往生し、私が物事を過度に複雑にしているのかどうか確信が持てませんでした。 これを達成する方法について誰かが正しい方向に私を向けることができますか?
10 xna  c#  matrix  projection  screen 

2
3D空間に1ピクセル幅の線を描く
カメラからどれだけ離れていても、画面上で常に正確に1ピクセル幅の線を3D空間に描画したいと思います。(単一点についても同じです)。 私がそれをどのように行うことができるかについてのヒントはありますか?
10 xna 

1
SharpDXはまだ十分に成熟していますか、それとも今すぐSlimDXを使い始めるべきですか?
XNAでのゲームプロジェクトを停止しようとしています。集めることができるものから、開発は終わりに近づいています(そして、現在の技術の背後にすでにあります)。したがって、新しいフレームワークまたはAPIを採用する必要があります。 私は2日間C ++を調べただけで、本当に自分には向かないと判断しました-しかし、DirectXへの直接アクセスは魅力的だと思います。SharpDXは出発点としては良いように思えますが、ドキュメントもコードコメントもありません。まだ使用できる状態ではないようです。 これらのフレームワークのいずれかまたは両方を使用した人々の意見に興味があります。どちらを学ぶべきかを確実に判断するのに役立ちます。アドバイスありがとうございます。
10 xna  slimdx  sharpdx 

2
ゲーム内の死んだオブジェクトを効果的に取り除く?
forループまたはforeachループ(問題ではない)を使用して、オブジェクトを更新または描画する必要があるときにすべてのオブジェクトをループします。ただし、オブジェクトが強制終了された場合は、コレクションから再度削除してください。 これを行うには、オブジェクトをデッドオブジェクトリストに追加し、すべてが描画および更新されたら、このリストのすべてを調べ、リスト内のオブジェクトも元のソースから削除します。 これを行うより良い方法はありますか?
10 xna  c#  xna-4.0 

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