我正在嘗試加載並掃描帶有XNA C#的Texture2D PNG圖像文件,以便在基於2D瓦片的遊戲中加載世界,我可以使用繪圖程序輕鬆創建該遊戲。我不知道如何去實際掃描和評估每像素的圖像。我需要掃描圖像文件的像素並獲取像素的RGB顏色值。然後我將加載世界,假定每個像素等於一個圖塊,並且圖塊的類型由所述像素的RGB顏色值確定。如何使用圖像文件在2D遊戲中加載世界/關卡?
我該如何去加載一個圖像作爲保存世界文件,並在每個像素的基礎上評估圖像?
我正在嘗試加載並掃描帶有XNA C#的Texture2D PNG圖像文件,以便在基於2D瓦片的遊戲中加載世界,我可以使用繪圖程序輕鬆創建該遊戲。我不知道如何去實際掃描和評估每像素的圖像。我需要掃描圖像文件的像素並獲取像素的RGB顏色值。然後我將加載世界,假定每個像素等於一個圖塊,並且圖塊的類型由所述像素的RGB顏色值確定。如何使用圖像文件在2D遊戲中加載世界/關卡?
我該如何去加載一個圖像作爲保存世界文件,並在每個像素的基礎上評估圖像?
你爲什麼不使用更簡單的東西,我不知道嗎?
大多數情況下,您擁有關卡數據,該數據映射至少2-3項。
所以磚的每個位置屬性的列表,你的形象就會有一堆磚,我們會從1數到20,讓我們說
然後你的李瓷磚的ST(2號)會去像這樣:
5, 6, 10, 12, 15
4, 8, 2, 2, 10
5, 9, 12, 15, 20
然後你可以從性能負載(3號)如下(其中0,是適合步行,1例不適合步行)
0, 1, 1, 1 ,1
0, 0, 0, 0, 0
1, 1, 1, 1, 1
這會產生一個走廊,例如你可以走路。您可以使用無限量的數字來表示您可以想到的任何屬性。
從那裏,您知道源圖集的哪些部分可以繪製哪裏以及它們的碰撞屬性。這將比在圖像文件中存儲這些屬性節省更多的內存。通過SQL,文本文件,XML,二進制文件,任何東西,加載屬性,繪製的地方等都可以以任何你喜歡的方式存儲。
你甚至可以放棄tileset部分,只是使用一個巨大的圖像繪製到屏幕上,並繼續使用屬性文本文件來存儲碰撞和其他瓷磚屬性數據,如在圖像上的不可見屬性網格。
這比RGB數據解析要簡單得多。想知道爲什麼當人們使用更簡單的結構多年建造這樣的2D遊戲時,爲什麼要用圖像和RGB值做所有這些?
這是一種油漆和創造水平發電機?
尼克是正確的。你的瓷磚地圖通常需要更多的信息,而不僅僅是瓷磚參考。比如碰撞圖和其他有關物品的分層信息等。您應該考慮更好的級別存儲機制。 – Ani
在基於XNA遊戲你能做到這樣....
Texture2D level = Content.Load<Texture2D>("level01");
Color[] data = new Color[level.Width * level.Height];
level.GetData(data);
for (int y=0; y<level.Height; y++)
for (int x=0; x<level.Width; x++)
{
int index = x + y * level.Width;
Color tile_data = data[index];
int tile_type = tile_data.R;
int tile_aux_info1 = tile_data.G;
...
CreateTile(x,y,tile_type,...)
}
看看這個鏈接:http://stackoverflow.com/questions/190385/how-to-manipulate-images-at-pixel-level-in-c – user1431765
非常感謝!我沒有想過要尋找更像這樣的東西。 – ColinBurke