我回来了,在过去的几周里我一直在顺利取得进展,但这让我在过去三天左右的时间里没有任何突破。
此代码供参考。
private void paintMap(int xToUpdate, int yToUpdate, int layerToUpdate)
{
// this should ONLY be called if mapBitmap has already been drawn initially
Graphics gfx;
// create a blank tile to place on top of whatever tile they want to place (to sucessfully update our tile)
Bitmap blankTile = new Bitmap(Program.pixelSize, Program.pixelSize);
gfx = Graphics.FromImage(blankTile);
gfx.Clear(Color.Transparent);
gfx = Graphics.FromImage(mapBitmap[layerToUpdate]);
// only draw a map, if a map has been loaded
if (mapLoaded)
{
#region Draw Map Loop
// draw the map
// find the tile at that point
int tile = map.mapTile[xToUpdate][yToUpdate].getTileLayer(layerToUpdate);
int x1 = Program.getTileXLocation(tile);
int y1 = Program.getTileYLocation(tile);
// set the tile's rectangle location
srcRect = new Rectangle(x1 * Program.pixelSize, y1 * Program.pixelSize, Program.pixelSize, Program.pixelSize);
// draw the tile
gfx.DrawImage(blankTile, xToUpdate * Program.pixelSize, yToUpdate * Program.pixelSize);
gfx.DrawImage(gfxTiles, xToUpdate * Program.pixelSize, yToUpdate * Program.pixelSize, srcRect, units);
// weather crap
// screenMain.DrawImage(gfxNight, x1 * Program.pixelSize, y1 * Program.pixelSize, night, units);
#endregion
}
else // otherwise, a map hasn't been loaded; clear the drawing surface
{
gfx.Clear(Color.Black);
}
gfx.Dispose();
}
这是共享相同名称的三种方法之一。我有一个不接受任何参数并刷新整个地图(图层和所有)的方法,并且此代码有效。
但是,当用户更新地图(通过放置/删除瓷砖)时,我不想重新绘制整个地图。相反,我只想用所做的更改来更新那个特定的空间。而不是更新每一层(通过切换那里绘制的瓦片)等等,所有的方法都是在旧瓦片上放置新瓦片。我添加了 blankTile 位图,认为在绘制更改之前绘制它会纠正问题,但事实并非如此。
我的询问是这样的:有没有办法通过删除那里的内容并用新图像替换它来更新位图上的特定图块?
如果需要,我可以提供更多信息。我想继续使用内置的 GDI 库,但如果解决此问题的唯一方法是切换,我会这样做。但我几乎可以肯定应该有一种方法可以解决这个特定问题,而无需关闭我的图形库。到目前为止,它已经完全满足了这个项目的需求(减去这个特定的错误)。