我正在使用Substrate解析minecraft文件數據。 Minecraft由塊組成,由塊組成。所以我有一張16x16不同的瓷磚。我在WPF中使用裁剪位圖來查找合適的圖形拼貼來組成地圖的一部分。然後我在WPF中分配一個Image()控件的'源',這是我的裁剪位圖。最後,我做myCanvas.Children.Add(myImage)...問題在於,在我的畫布中大約30張左右的圖像之後,應用程序變慢。這是一個問題,因爲典型的Minecraft地圖會有數百或數千個圖像。有沒有更好的方法來繪製大量的位圖數據?我喜歡使用圖像控件,因爲這樣我就可以在地圖上放置工具提示並使其交互。但是我接受Image控件可能更昂貴,並且有數千個控件可能無法工作。這是我的代碼。 (這只是分析有一定價值的瓷磚,因此,如果ID == 9)WPF'Map'控件;使用畫布顯示大量的位圖圖像
var mapTiles = (BitmapImage)FindResource("mapTiles");
CroppedBitmap waterImage = new CroppedBitmap(mapTiles, new Int32Rect(352, 48, 16, 16));
CroppedBitmap grassImage = new CroppedBitmap(mapTiles, new Int32Rect(0, 0, 16, 16));
foreach (ChunkRef chunk in chunkManager)
{
countOfTiles++;
for (int x = 0; x <= 15; x++)
{
for (int z = 0; z <= 15; z++)
{
int height = chunk.Blocks.GetHeight(x, z);
//TODO: Normalize Chunk X, Z so 0,0 is the smallest chunk so everything is visible on the canvas.
if (height > 0 && chunk.X > 0 && chunk.Z > 0)
{
var block = chunk.Blocks.GetBlock(x, height - 1, z);
if (block.ID == 9)
{
//352, 48
Image image = new Image();
image.Source = waterImage;
worldMap.Children.Add(image);
Canvas.SetTop(image, (chunk.X + x) * 16);
Canvas.SetLeft(image, (chunk.Z + z) * 16);
image.ToolTip = countOfTiles.ToString();
}
非常感謝!這種方法最終以多快的速度出現,這是驚人的。一個更正:而不是矩形上的'背景'屬性,我用'填充'。我認爲這只是一個錯字,因爲我找不到背景屬性。 – Richthofen
你是對的,這是一個錯字。甚至可以設計一個輕量級的Control,它封裝了一些塊的子集。此外,您必須在World Size中的某個位置移動到虛擬化面板。 – user7116
我很好奇你的意思是通過虛擬化視圖。你能提供一些鏈接或其他信息嗎?再次,真的很感謝輸入! – Richthofen