簡體   English   中英

Texture2D渲染圖像

[英]Texture2D render image

使用圖像填充Texture2D的最快方法是什么?

在/Images/image.png下我有所需的圖像。

我現有的代碼只用白色填充紋理。 如何讓它渲染圖像?

Texture2D texture = new Texture2D(graphics.GraphicsDevice, this.Width, this.Height, false, SurfaceFormat.Color);
Color[] colors = new Color[this.Width * this.Height];
for (int j = 0; j < colors.Length; j++)
    colors[j] = color;
texture.SetData(colors);

也許我做錯了但是在屏幕上動態顯示圖像的最簡單/最快的方法是什么?

更新

我更改了代碼以使用ContentManager。

ContentManager contentManager = (Application.Current as App).Content;
Texture2D texture = contentManager.Load<Texture2D>("/Images/block.png");

contentManager.Load<Texture2D>(@"Images/block.png")

拋出“未找到文件”。

contentManager.Load<Texture2D>(@"/Images/block.png")

拋出“加載錯誤”\\ Images \\ block.png“。無法打開文件。”

最簡單的方法是按照建議依賴內容管道。

在創建XNA項目時,您應該有兩個項目:MyGame和MyGame(Content)。 右鍵單擊“內容”,然后選擇“添加文件”。 這將允許您導入可以輕松修改並編譯為.xnb格式的圖像。 我相信這是為了加速一點事情。

完成后,您需要一個ContentManager對象。 理想情況下,您將使用游戲類中的Content - 這已經為您設置了。 但你可以創建一個:

ContentMananger content = new ContentManager(Services, "Content");

Services來自您的游戲類(或具有GraphicsDeviceServiceIServiceProvider )。 第二個參數是內容文件夾的根目錄。

這將允許您通過以下方式從內容管道加載任意數據格式:

content.Load<Texture2D>("myTexture");

(請注意,您不包含文件擴展名。)

為方便起見,我建議您在Content項目中創建一個“Images”文件夾,因為最終會有大量資源,這樣可以更輕松地進行組織。 您還可以使用SFX,音樂,XML等文件夾來處理游戲所需的所有數據類型。

所以你要這樣做:

Texture2D myTexture = content.Load<Texture2D>("images/myTexture");
SpriteBatch spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

(請注意,這些對象顯然需要在類范圍內可見)。 這將出現在用於加載文件的初始化代碼中。

之后,您將使用Draw方法實際繪制精靈

public override void Draw(SpriteBatch spriteBatch)
{
   spriteBatch.Begin();
   spriteBatch.Draw(myTexture, new Vector2(320, 240), Color.White);
   spriteBatch.End();
}

而你的精靈是神奇地畫出來的。

你正在做的主要是以編程方式定義一個圖像,然后繪制它。 雖然他們有點應用,可能不是你想要的。

如果您嘗試在運行時加載圖像,則可以使用以下代碼:

string file = @"Content/images/1.png"; // @ sign is to treat '/' as a character, not a control symbol
FileStream fs = new FileStream(file, FileMode.Open);
Texture2D texture = Texture2D.FromStream(GraphicsDevice, fs);
fs.Dispose();

...然后只使用這樣的texture

spritebatch.Draw(texture, new Vector2(123, 456), Color.White);

要使用FileStream您可能需要using System.IO;添加using System.IO; 在你的游戲課上。

此方法不被視為標准做法,可能會導致alpha通道出現問題,要修復它們,您需要使用不同的Alpha混合狀態。 您可以在此問題中找到更多相關信息。

如果您沒有使用內容管道添加紋理,請使用Texture2D.FromStream()

FileInfo imageFile = new FileInfo("Images\\image.png");
Texture2D image = Texture2D.FromStream(GraphicsDevice, imageFile.OpenRead());

如果您正在加載大量紋理,則可能需要在不再需要它們時處置它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM