-1

XNA フレームワークに関する知識が相対的に不足しているため、修正できないと思われる奇妙な問題があります。

基本的に、Texture2D の新しいインスタンスに設定された Texture2D 参照があります。実行時に一部のピクセルが設定され、ゲームループで描画されるため、これはすべてうまく機能します。

奇妙なことに、参照を null に設定すると (null でない場合にのみ描画されます)、期待どおりに描画されません。

後で、新しい Texture2D への参照を設定すると、画面への描画が開始されます。問題は、元の Texture2D オブジェクトのすべてのデータを保持していることです。

編集

申し訳ありませんが、以前は明確ではありませんでした。

私が持っているのは、このようなものです...

private Texture2D WorkingTexture {get; set; }

private void Update()
{
 if(some input)
 {
  this.WorkingTexture = null;
 }

 if(some other input)
 {
  this.WorkingTexture = new Texture2D(this.GraphicsDevice, 500, 500, true, SurfaceFormat.Color);

  this.WorkingTexture.SetData<Color>(0, new Rectangle((int)vector2.X, (int)vector2.Y, 4, 4), colors, 0, 16);

  }
}

private void Draw()
{
 if (this.WorkingTexture != null)
 {
    spritebatch.draw(this.WorkingTexture,.....);
 } 
}

2回目の編集

また、for ループを設定し、テクスチャの作成後にテクスチャのすべてのピクセルを手動で色に設定しました。これは機能しますが、以前に設定した色としてピクセルを表示します。これは非常に奇妙です。


このスレッドは無視してください。この問題は非常に恥ずかしいことに、私自身がやったものです。変更するピクセルをバッファリングするコードがいくつかありましたが、そうです...あなたはそれをクリアしていないと推測し、新しいテクスチャインスタンスで作業をやり直していました。

とても恥ずかしい……。

4

3 に答える 3

1

テクスチャはどのように作成しますか? リソース (texture = Content.Load("texture_name")) からそれらをロードする場合、あなたが説明した問題は、ロジックのバグのように聞こえます: プログラムは、あなたが思っていることをしていません。トレース、デバッグ...

まったく新しいテクスチャ (texture = new Texture2D(...)) を作成している場合、新しいテクスチャが初期化されておらず、そのメモリ スペースが何らかのメモリ プールから取得されている可能性があります (検証されていません)。テクスチャ データを破棄するようにマークされています。たとえば、テクスチャ データを作成したらすぐに初期化して、真っ黒に設定します。

于 2011-07-27T16:10:10.023 に答える
1

先に進む詳細がなくても、以前に行った変更を使用して Texture2D を読み込もうとしているように思えます。nullに設定しているので、Texture2Dをリロードすると元に戻ります。後で使用する場合は、ピクセルに加えた変更を保存する必要があります。お役に立てれば!

于 2011-07-27T15:14:00.803 に答える
1

このようなテクスチャを設定しました

Texture2D texture = Content.Load<Texture2D>("texture_name");

そして、新しい参照を次のように適用します

texture = Content.Load<Texture2D>("other_texture_name");

右?

それは本来あるべき姿ではありません。特定のテクスチャを使用するには、GraphicsDevice を設定する必要があります。BasicEffect クラスでは、これは次のようになります。

BasicEffect effect = new BasicEffect(GraphicsDevice);
effect.Texture = texture;
effect.CurrentTechnique.Passes[0].Apply();
于 2011-07-27T15:25:57.767 に答える