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

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

3
Farseer 2.xが一時ではなく、メンバーとしてスタックを格納するのはなぜですか?(。ネット)
更新:この質問は、Farseer 2.xに関するものです。新しい3.xではこれができないようです。 現在、Farseer Physics Engineを非常に広範囲に使用していますが、クラスのメンバーとして多くの一時的な値の型を格納しているように見え、期待どおりにスタックに格納されていないようです。 これはBodyクラスの例です: private Vector2 _worldPositionTemp = Vector2.Zero; private Matrix _bodyMatrixTemp = Matrix.Identity; private Matrix _rotationMatrixTemp = Matrix.Identity; private Matrix _translationMatrixTemp = Matrix.Identity; public void GetBodyMatrix(out Matrix bodyMatrix) { Matrix.CreateTranslation(position.X, position.Y, 0, out _translationMatrixTemp); Matrix.CreateRotationZ(rotation, out _rotationMatrixTemp); Matrix.Multiply(ref _rotationMatrixTemp, ref _translationMatrixTemp, out bodyMatrix); } public Vector2 GetWorldPosition(Vector2 …

2
ボクセルフェースクロール(メッシュの単純化、場合によっては貪欲を使用)
編集:これは私自身の学習経験のためだけのものであり、私がこの質問をするのはパフォーマンス上の理由のためではありません。 これはMinecraftのような地形エンジンに関するものです。ブロックをチャンク(16x256x16ブロック)に格納します。チャンクを生成するときは、複数の手順テクニックを使用して、地形を設定し、オブジェクトを配置します。生成中は、チャンク全体(ソリッドまたは非ソリッド)に1つの1D配列と、ソリッドブロックの個別の1D配列を保持します。 生成後、隣接するソリッドブロックを繰り返し処理して、隣接するソリッドがないブロック面のみを生成します。生成する顔を独自のリストに保存します(これは、可能な顔/法線ごとに1つずつ、6つのリストです)。チャンクをレンダリングするとき、カメラの現在のチャンクのすべてのリストと、他のすべてのチャンクのカメラに面するリストのみをレンダリングします。これを行うには、6つのリストすべてを1つのバッファーに格納し、描画する範囲を変更します。 Andrew Russellが提案したこの小さなシェーダートリックで2Dアトラスを使用して、類似した面を完全にマージしたいと思います。つまり、それらが同じリストにある場合(同じ法線)、互いに隣接している場合、同じライトレベルである場合などです。最終的には四角形になることはわかっていますが、頂点の数を簡単に50%削減できるはずです私の見積もりが正しい場合はそれ以上。 私の仮定は、6つのリストのそれぞれを、それらが置かれている軸、次に他の2つの軸でソートすることです(ブロックの上部のリストは、Y値、X、Zの順にソートされます)。 これだけでも、非常に簡単に顔のストリップをマージできますが、可能な場合は、ストリップだけではなく、マージすることを目指しています。私はこの貪欲なメッシュアルゴリズムについて読みましたが、それを理解するのに多くの問題を抱えています。 だから、私の質問:説明されているように顔のマージを実行するには(動的なテレイン/ライティングの悪いアイデアであるかどうかを無視して)、実装が簡単なアルゴリズムがあるのでしょうか?また、私は貪欲なアルゴリズムをはるかに簡単な方法(リンクまたは説明)で案内する答えを喜んで受け入れます。 実装が簡単な場合や、ストリップを実行するよりも少しだけ優れている場合でも、パフォーマンスが少し低下してもかまいません。ほとんどのアルゴリズムは四角形ではなく三角形に焦点を当てているのではないかと心配しています。現在の方法で2Dアトラスを使用すると、現在のスキルに基づいて三角形を実装できるかどうかわかりません。 PS:私はすでにチャンクごとに錐台カリングを行っており、説明したように、ソリッドブロック間のフェースもカリングします。私はまだ閉塞淘汰をしていないし、決してしないかもしれない。 *編集:私は独自の小さなテクニックを実装しましたが、おそらく名前が付いていますが、6つのリストをたどります。これらのリストは、それらが置かれている軸、ブロックタイプ、照明レベルの順に並べ替えられています。私はそれらを反復処理し、移動しながら新しい長方形を作成し、同時に(特定の軸に向かって大きなバイアスをかけて)それらを成長させます。明らかに最適ではありませんが、実際には非常に高速であり、頂点数を平均で50%近く削減します。Byte56のコメントは、私が本当の答えを考えているクローゼットですが、答え/報奨金としてそれを選択することはできません。 これは、最適化をほとんど行わずに完全な初期地形を生成した後、この問題を処理する私の速くて単純な方法です。与えられたすべての正方形が同じ画像、光レベル、法線などであると仮定します。各色は、私がレンダリングする異なる四角形です。私のリストはそれらがそうであるようにソートされているので、これは非常に簡単/高速なアプローチです。

2
Rectangle.Intersects()から衝突の詳細を取得する
私はある時点で、次のようなものでボールとパドルの衝突を検出するブレイクアウトゲームを持っています。 // Ball class rectangle.Intersects(paddle.Rectangle); 現在との衝突の正確な座標、またはそれに関する詳細を取得する方法はありますXNA APIか? 衝突の瞬間に各オブジェクトの正確な座標を比較するなど、いくつかの基本的な計算を行うことを考えました。次のようになります。 // Ball class if((rectangle.X - paddle.Rectangle.X) < (paddle.Rectangle.Width / 2)) // Collision happened on the left side else // Collision happened on the right side しかし、これが正しい方法かどうかはわかりません。 皆さんは私がそれを達成するために使用しなければならないかもしれないエンジンについて何かヒントがありますか?または、この方法を使用した優れたコーディング慣行ですか?

5
速度でぼやけてレンダリングされるスプライト
ゲームにベロシティを追加した後、テクスチャがぴくぴく動いているように感じます。最終的にスクリーンショットでキャプチャするまで、それは私の目だと思いました。 左側はゲームでレンダリングするものです。右側は元のスプライトを貼り付けたものです。(これは6倍に拡大したPhotoshopのスクリーンショットです。) エッジがエイリアシングしていることに注意してください。サブピクセルレンダリングのように見えます。実際、整数値を使用して描画するように私のスプライト(intとして位置と速度を持っている)を強制しなかった場合、MonoGameが浮動小数点値で描画していることを誓います。しかし、そうではありません。 これらがぼやけて表示される原因は何ですか?速度を適用しないと発生しません。 正確には、私のSpriteComponentクラスにはVector2 Positionフィールドがあります。を呼び出すときDraw、私は基本的new Vector2((int)Math.Round(this.Position.X), (int)Math.Round(this.Position.Y))にポジションに使用します。 以前、静止オブジェクトでさえジッターするバグがありPositionましたints。これは、直線ベクトルを使用し、値をに丸めなかったためです。ラウンドの代わりにFloor/ を使用するCeilingと、スプライトはシンク/ホバーします(いずれの方法でも1ピクセルの違いがあります)が、ぼやけて描画されます。

1
gluLookAtはどのように機能しますか?
私の理解から、 gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); 以下と同等です。 glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); しかし、ModelViewマトリックスを出力すると、への呼び出しがglTranslatef()正しく機能していないようです。コードスニペットは次のとおりです。 #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int Ry …

2
サーバー側入力
現在私のゲームでは、クライアントはレンダラーにすぎません。入力状態が変更されると、クライアントはサーバーにパケットを送信し、プレーヤーが入力を処理しているかのようにプレーヤーを移動しますが、サーバーは最終的な判断を下します。 これは、1つの大きな問題を除いて、通常は非常にうまく機能します。基本的に、プレーヤーが崖に向かってエッジに向かって歩いていて、エッジから出る直前に停止する場合、場合によっては1秒後に、エッジからテレポートされます。これは、サーバーが情報を処理した後で、「Wを押すのをやめた」パケットが送信されるためです。 ここに私が何を意味するかを理解するのに役立つラグダイアグラムがあります:http : //i.imgur.com/Prr8K.png サーバーが処理するフレームごとに "W Pressed"パケットを送信するだけでもかまいませんが、これは帯域幅のコストがかかるソリューションのようです。 どんな助けでもありがたいです!

4
2つのオブジェクト間で回転を維持する
XNAゲームでは、2つのオブジェクトが衝突しています。最初のオブジェクトが他のオブジェクトと衝突すると、そのオブジェクトにラッチして、世界中を移動することができます。ここで数学に問題があります(数学は私の強みではありません)。私は現在、2番目のオブジェクトを最初のオブジェクトにラッチして移動しますが、元の方向を維持することができません。そのため、オブジェクトが上を向いている場合は、元のアイテムと一緒に回転している方法に対してこの方向を維持する必要があります。 これを達成するための最善の方法に関するヒントはありますか?
9 xna  rotation 

3
スプライトシートを分解する方法
フォーマットが不十分で、分解したり、スプライトごとに1つずつ多くの小さな画像に分割したりしたいスプライトシートがたくさんあります。それができれば、カスタムテクスチャパッカーツールを使用してゲームアセットを構築できます。 私の開発ツールは、Windowsを対象としたXNAおよびC#です。画像を分解するにはどうすればよいですか?

1
スプライトの回転に使用されるXboxサムスティック。基本的な数式により、90度間隔で「スティック」または「スティッキー」に感じます。どのようにスムーズな回転を得るのですか?
非常に基本的な式を使用して、Xboxコントローラーのサムスティックに基づいてスプライト(宇宙船など)が向いている角度を計算します。つまり、サムスティックを使用して船を回転させます。 私の主な更新方法では: shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y); 私のメインの描画方法では: spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1); ご覧のとおり、非常にシンプルなので、現在のラジアンをサムスティックから取り出してフロートに格納します shuttleAngleこれをシャトルを描画するための回転角度(ラジアン)引数として使用します。 どういうわけか、スプリントを回転させると、0、90、180、270度の角度でベタつく感じがします。それらの角度で解決したいと考えています。同様のメカニズムを使用するゲームで感じるようなスムーズで自然な回転は得られません。PS:私のXboxコントローラーは大丈夫です!
9 xna  c#  sprites  rotation  gamepad 

4
フルスクリーンクワッドでレンダーターゲットにピクセルパーフェクトレンダリング
一連の値をレンダーターゲットにレンダリングするときに問題が発生します。値が、希望する正確な範囲になることはありません。基本的に、フルスクリーンクワッドとピクセルシェーダーを使用してレンダーターゲットテクスチャにレンダリングし、テクスチャー座標をシェーダーでのいくつかの計算の基礎として使用するつもりです。左上隅の(0,0)から右下隅の(1,1)までのクワッド範囲のテクスチャ座標...問題は、補間後、これらの値がピクセルシェーダーに到達しないことです。 。 例: 4x4テクスチャにレンダリングし、この場合のシェーダーは、赤と緑のチャネルでテクスチャ座標(u、v)を出力するだけです。 return float4(texCoord.rg, 0, 1); そこから取り出したいのは、左上のピクセルがRGB(0,0,0)であり、したがって黒であるテクスチャであり、右上のピクセルがRGB(255,0,0)であり、したがって明るい赤と左下のピクセルはRGB(0,255,0)-明るい緑です。 しかし、代わりに私はこれをここの右側に取得します: (直線四角形レンダリング、補正なし) 左上のピクセルは黒ですが、他のコーナーでは比較的濃い赤と濃い緑しか表示されません。それらのRGB値は(191,0,0)と(0,191,0)です。私はそれがクワッドのサンプリング位置に関係していると強く思います:左上のピクセルはクワッドの左上隅を正しくサンプリングし、UV座標として(0,0)を取得しますが、他のコーナーのピクセルはクワッドの他のコーナー。左の画像でこれを示しました。四角形を表す青いボックスと、上部のサンプリング座標を表す白いドットです。 これで、Direct3D9で画面揃えのクワッドをレンダリングするときに座標に適用する必要があるハーフピクセルオフセットについて知っています。これからどのような結果が得られるか見てみましょう: (DX9のハーフピクセルオフセットでレンダリングされたクワッド) 赤と緑が明るくなりましたが、まだ正しくありません。赤または緑のカラーチャネルで取得できる最大値は223です。しかし今、私はもう純粋な黒すら持っていませんが、代わりにRGB(32,32,0)の暗い黄色がかった灰色です! 私が実際に必要とするのは、この種のレンダリングです。 (ターゲットレンダー、縮小されたクワッドサイズ) 最初の図と比較して、クワッドの右と下の境界線を1ピクセル上および左に移動する必要があるようです。次に、右側の列と一番下の行のピクセルはすべて、クワッドの境界から正しくUV座標を取得します。 VertexPositionTexture[] quad = new VertexPositionTexture[] { new VertexPositionTexture(new Vector3(-1.0f, 1.0f, 1f), new Vector2(0,0)), new VertexPositionTexture(new Vector3(1.0f - pixelSize.X, 1.0f, 1f), new Vector2(1,0)), new VertexPositionTexture(new Vector3(-1.0f, -1.0f + pixelSize.Y, 1f), new Vector2(0,1)), new …

4
XNA ContentPipelineを使用して、完全なXNA GSのないマシンでファイルをエクスポートする
私のゲームは、実行時にコンテンツパイプラインを使用してスプライトシートをロードします。ゲームのアーティストから変更されたスプライトシートが送られてきました。マシンでビルドを行い、更新されたプロジェクトを彼に送ります。そのため、彼が完全なXNA Game Studioをインストールしなくても、彼のマシンでxnbファイルを生成する方法(これはコンテンツパイプラインの出力です)を探しています。 1)私のアーティストにVS + Xnaをインストールしてほしくない(VSの無料バージョンがあることは知っているが、チームに人を追加するとこれは拡張されない)。2)Xboxでこのエディター/ツールを実行することに興味がないので、Windowsのみのソリューションが機能します。3)MSBuildオプションは知っていますが、完全なXNAが必要です 私はShawnのブログを調査したところ、Msbuild Sampleを使用するオプション、またはXNA 4.0の新しいオプションを使用するオプションを見つけましたが、ここでは有望に見えますが、同じ制限があるようです:ContentPipelineはXNA redistの一部ではないため、完全なXNA GSをインストールする必要があります。 だから誰かがこれの回避策を見つけましたか?

2
XNA / C#プラットフォームのスクリプト言語としてのLuaとPythonの長所と短所は何ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私はゲームの私の古代のアイデアの1つに挑戦することを考えています。このゲームの中核となるのは、ゲーム環境とオブジェクトの機能的なカスタマイズのレベル(宇宙船の武器の動作の変更など)です。このため、ゲームはスクリプト対応である必要があります。また、私はそれを商業化することを目指していません、それは私にとって興味深いプログラミングの挑戦にすぎません。 私は主に.NETの人なので、ゲーム自体にはXNA / C#を使用します。スクリプトについては、PythonまたはLuaを使用することを考えています。私は以前にPythonの経験があり、言語としてそれに対して何もしていません。一方、Luaは私にとってはほぼ完全に新しいものですが、World of Warcraftのアドオンのマイナーな変更がいくつかありますが、それは期待できるようです。だからここに私の質問です: XNA / C#プラットフォームのスクリプト言語としてのLuaとPythonの長所と短所は何ですか? それらの1つはXNA / C#で使用する方がはるかに簡単ですか?XNA / C#と一緒に使用すると、そのうちの1つに特定の利点または欠点がありますか?XNA / C#を他のどれよりも推奨するのはなぜですか?
9 xna  c#  scripting 

2
太陽の動きのための機能?
したがって、地平線に設定された太陽スプライト(x = 0、y = worldheight / 2)が与えられた場合、太陽を昇らせてから降らせる関数を考案しようとしています。 これを行う最良の方法はsin関数ですが、それを使用する方法はわかりません。 y = sin(x)を使用する場合、完全な曲線の場合、xの速度は一定であるのに対し、xは0からpiの範囲でなければなりません。 考えや提案はありますか? 編集:みんなありがとう!

3
多くの正方形のタイルベースの効率的な衝突検出?
現在私はタイルベースのゲームの独自のテイクに取り組んでいます(Terrariaを考えてくださいが、空想的ではありません(それは言葉だと思いますか?そうでない場合は申し訳ありません))。 とにかく、私は現在、衝突検出が機能しています(コーナーケースの場合でも!)。これは私にとって大きな一歩でした。スプライトがブロックを通過しないのを見るのは非常にうれしいことです。しかし、それから私はベンチマークするという考えを持っていました。悪いアイデア。 1,000平方、問題ありません。10,000の正方形、3つの文字は少し遅れました。3文字で100,000の正方形(本当に巨大な地図)はプレイできませんでした。 プレイヤー、キャラクター、アイテムなどから遠すぎるブロックも考慮したくないという問題がありますが、それらを常にメモリからロードしたくありません。 ここまでが私のアルゴリズムです。自由に非難してください。 foreach (Block in level) { if (distance from block to player > a specified amount) ignore this block; else { get the intersection depth between the two bounding boxes if (depth of intersection != Zero-vector) { check y size vs x size resolve on smallest …

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 イベントの処理とサンプルコードのテストに関するこの基本的なチュートリアルを見てきたので、私が議論しているのはイベントが論理的な選択になると思われます。しかし、私が見たサンプルでそれを使用することはあまりできません。すべきでない明白な理由はありますか?

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