我正在使用Substrate解析Minecraft文件数据。 Minecraft由'块'组成,每个块又由多个方块构成。我有一个带有不同16x16图块的精灵表。我在WPF中使用croppedbitmap来查找适当的图形块以组成地图的一部分。然后我为WPF中的Image()控件分配'source',即我的croppedbitmap。最后,我执行myCanvas.Children.Add(myImage)...的操作。问题是,在我的画布中大约有30多个图像后,应用程序就会变得非常缓慢。这是个问题,因为典型的Minecraft地图将有数百或数千个图像。是否有更好的方法来绘制大量的位图数据?我喜欢使用Image控件,因为我可以在地图上放置工具提示并使其交互式。但我承认Image控件可能更昂贵,拥有数千个Image控件可能行不通。以下是我的代码。(此代码仅解析特定值的瓷砖,因此如果id == 9)
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();
}