Я вернулся, и за последние несколько недель я добился плавного прогресса, но это поставило меня в тупик в течение последних трех дней или около того, без каких-либо прорывов.
Этот код для справки.
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, но если единственный способ решить эту проблему — переключиться, я бы так и сделал. Но я почти уверен, что должен быть способ исправить эту конкретную проблему, не отключая мою графическую библиотеку. Пока это более чем подходит для нужд этого проекта (за исключением этой конкретной ошибки).