問題タブ [spritebatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
75 参照

xna-4.0 - XNA 4.0: SpriteBatch による地形の不具合

XNA で地形衝突を実装しようとしているので、計算が正しいかどうかをテストできる動的テキストを追加しました。私が呼び出すまで、すべてがうまくレンダリングされました:

spriteBatch.Begin(); spriteBatch.End();

また

spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); spriteBatch.End();

これらの手順では、地形が少しグリッチします。コードからこれらの 2 行を削除すると、すべてが正常に戻ります (ただし、HUD を描画できないことを意味します)。

何が原因なのか、どうすれば修正できるのか、誰にも手がかりがありますか?

画面:

スプライトバッチをオンにして

スプライトバッチオフで

0 投票する
1 に答える
182 参照

c# - XNA - 文字列のリストを描画する方向を変更する方法

このように見えるように、スプライトバッチで文字列のリストを描画するにはどうすればよいですか。

アイテム 1 アイテム 2 アイテム 3 アイテム 4 の代わりに、または次の代わりに:

0 投票する
1 に答える
450 参照

matrix - Xna スプライトの位置とビューポート

私は XNA が初めてで、スプライトバッチをいじっています。頭の中で解決できない問題があります。

Spriteというクラスがあります。このスプライトは、画面内のスプライトの位置を格納する Vector2 を取得します。次のような呼び出しで Spritebatch を使用してスプライトを描画します。

このタイプの座標を使用してシーンまたは画面をデザインするとします。シーンの一番下にあるはずの床があるかもしれません。固定位置に配置し、誰かがそれをより高い解像度で再生すると、床がシーンの下部に表示されません。

ViewPort の幅と高さに関係なく、定義された空間内で作業する方法はありますか?

ここでいくつかの記事を読みました。最初に RenderTarget にレンダリングしてから、これをスケーリングしてビューポートにレンダリングする唯一のソリューションですか?

あなたが私を助けて、私が夢中にならないように守ってくれることを願っています :) !

ありがとう。

0 投票する
1 に答える
161 参照

c# - XNA: Texture2D からのポリゴン ソース

問題があります。SpriteBatch を使用すると、ソース Texture2D から四角形の領域しか描画できません。

ソース テクスチャから多角形または円領域を描画する方法を教えてください。2D スプライト ゲームを作成しています。

前もって感謝します、デニス

0 投票する
1 に答える
2031 参照

xna - 少数の Draw() 呼び出しによるモノゲーム XNA の低フレームレート

XNA で作成したスクロール シューティング ゲームを、MonoGame を使用して Linux に移植しています。ほとんどすべてが順調に進んでいますが、特定の場所で SpriteBatch.Draw() の呼び出しでフレームレートが損なわれるという問題が発生しています。ほとんどのゲームは問題なく動作します。減速することなく、一度に多数の敵と多数の弾丸を引き寄せます。ただし、コマ落ちの原因となっている部分は、階層化されたスクロール背景です。コードの関連セクションはこちらです。

Level.cs:

上記の「scrollingBackground」は、ScrollingBackgroundLayers のリストであり、関連するセクションは次のとおりです。

ScrollingBackgroundLayers.cs:

ScrollingBackgroundLayer.Draw() への呼び出しをコメント アウトするとすぐに、すべてのフレームレートの問題が解消されるため、SpriteBatch がスクロール レイヤーを描画しようとすることから問題が発生していることを示す大きなヒントのようです。明らかに、私はこれがなぜ起こっているのかを理解したいと思っています。SpriteBatches に関する他のいくつかの問題を調べましたが、答えにつながる可能性があることがわかった最も一般的なことは、テクスチャが変更されるたびに新しい SpriteBatch が作成されるという事実ですが、SpriteSortMode を Texture に設定しても改善されませんでした。

フレームレートの低下は、7 つの異なる ScollingBackgroundLayers を持つゲームのステージで発生し、それぞれが幅約 700 ピクセル、高さ 900 ピクセルの個別のテクスチャを描画します (スクロール効果を考慮して、各レイヤーはこれを 2 回以下にする必要があります)。 . ゲームはまったく同じオーバーロードを使用して 2 ~ 300 もの弾丸をレンダリングすることがあるため、別の 14 回の呼び出しはバケツにドロップする必要があります。これは単に、SpriteBatch が効果的に処理するには大きすぎるテクスチャを描画しようとすることによる問題ですか? これは Windows バージョンの問題ではないので、これに対するプラットフォーム固有の回避策がないか、MonoGame の Draw の実装が単に非効率的であるかどうか疑問に思っています。どんなフィードバックでも大歓迎です。

興味のある方のための完全なソース:

Linux - https://github.com/cmark89/AsteroidRebuttal-Linux
Windows - https://github.com/cmark89/AsteroidRebuttal

編集:もう少しいじってみました。Draw() の呼び出しを変更して、宛先の四角形が画面の描画可能領域と等しくなるようにしましたが、顕著な変化はありませんでした。テクスチャを非常に小さいものに交換したところ、ラグが解消されたので、テクスチャのサイズと関係があると思います。

編集 2: わかりました。最終的には、弾丸を噛んで、使用していた透明レイヤーを切り取ってしまいました (ある種の怠け者のように)。おそらく膨大な数の無駄なピクセルをレンダリングする必要がなくなったため、問題は解決しましたが、なぜこれが Linux だけの問題なのか疑問に思っています。当分の間問題を解決しましたが、劇的なパフォーマンスの違いを引き起こしている可能性があることについて誰かが洞察を持っている場合に備えて、これを少し開いたままにします.

0 投票する
1 に答える
266 参照

c# - XNA for Windows Phone のビルボードの透過性

うまくいけば、私が見ていない簡単な修正: 爆発のためにビルボードに透明度を実装しようとしていますが、png ファイル自体で透明に定義されていないピクセルがある場合、スプライトはしっかりしたままです。Color.White透明度(float0と1の間の値)を掛けて透明度を変更しようとしています

明らかな間違いはありますか?それとも、Windows Phone 7 用の XNA は、透明なものを 3D でレンダリングすることができないのでしょうか?

0 投票する
1 に答える
382 参照

xna - MonoGame Spritebatch の部分的な描画のみの TileField

私は現在、位置が歩行可能かどうかを示すためにタイルを使用する MonoGame を使用したトップダウン ゲームに取り組んでいます。タイルのサイズは 32x32 (画像にもあります)

200 x 200 のグリッドが壁のタイルで埋められています (そして、ランダム ジェネレーターがパスと部屋を作成することになっています) が、画面にすべてのタイルを描画すると、多くのタイルが失われます。以下は、位置 (x81 y183) の後にタイルが描画されない画像ですか?

http://puu.sh/3JOUO.png

配列を埋めるために使用されるコードは、壁タイルをグリッドに配置します。タイルの位置は、その配列位置にタイル サイズ (32x32) を掛けたものです。親はカメラ位置に使用されます。

描画するときは、すべてのタイルをループして、それに応じて描画します。これは Game.Draw 関数で起こることです

map.draw 関数は、基本的に各タイルを描画するこの関数を呼び出します。各タイルの描画呼び出しがヒットした回数にカウンターを置いてみました。描画関数が更新されるたびに、使用するタイルの量である 40000 回呼び出されます。だからそれはそれらすべてを描画しますが、私はまだそれらすべてを画面に表示していません

これは、タイルを描画するためのコードです。現在の画像は常に 0 で、GlobalPositionはタイルの位置からカメラの位置を引いたものです。

コードの壁についてお詫び申し上げます。私にはすべてが非常に単純に見えますが、すべてのタイルを描画していない理由がわかりません。描画されていないタイルの表示はまだtrueで、currentImageは 0 である必要があります

0 投票する
1 に答える
607 参照

c# - XNA 4.0 SetRenderTarget で紫色の画面全体が表示される

現在、個人的なプロジェクトで XNA を使用して 2D 横スクロール ゲームを作成しています。当面の私の目標は、シェーダーを楽しむことです。しかし、私は実際に SetRenderTarget(RenderTarget2D) メソッドで立ち往生しています。なぜそれを呼び出すと、ゲームが完全な紫色の画面になるのかわかりません。

どこでも検索しましたが、問題がどこにあるのかまだわかりませんが、おそらくスプライトバッチの開始方法が原因だと思います。

何か案は ?前もって感謝します :)