Stack Overflow на русском Asked on February 27, 2021
Пытаюсь написать простую 2D игру. Вот что уже сделано:
public interface GameObject
{
Bitmap Picture { get; }
int OffsetX { get; }
int OffsetY { get; }
}
Свойство Picture возвращает картинку для отрисовки текущего объекта.
public static class Game
{
public class MapIndexer
{
public GameObject this[int x, int y]
{
get => map[y, x];
set => map[y, x] = value;
}
}
private static MapIndexer indexer;
public static MapIndexer Map
{
get => indexer ?? (indexer = new MapIndexer());
}
static GameObject[,] map = new GameObject[,]
{
{ null, null, null },
{ null, null, null },
{ null, null, null }
};
public static int MapWidth
{
get => map.GetLength(1);
}
public static int MapHeight
{
get => map.GetLength(0);
}
}
Класс игры, здесь индексатор для обращения к карте в Декартовой системе (например ход вниз – Game.Map[x, y+1], иначе ход вниз это Game.Map[x+1, y]). Нули в массиве это филлер карты, в моем случае просто трава. Также создал простой класс Player который возвращает свою картинку.
private void Form1_Paint(object sender, PaintEventArgs e)
{
for (int y = 0; y < Game.MapHeight; y++)
for (int x = 0; x < Game.MapWidth; x++)
{
e.Graphics.DrawImage(Properties.Resources.Grass, new Point(x * size, y * size));
if (Game.Map[x, y] is not null)
e.Graphics.DrawImage(Game.Map[x, y].Picture, new Point(x * size + Game.Map[x, y].OffsetX, y * size + Game.Map[x, y].OffsetY));
}
}
Сам код отрисовки. Выглядит для меня странно, что и подтверждается его работой – при отрисовке анимации с периодом 200мс картинга "моргает". Собственно вопрос – как оптимизировать всю эту отрисовку?
Судя по названию методов в вашем коде вы отрисовываете вашу картинку сразу на форму. Поэтому для формы установить флаг DoubleBuffered в значение true. Это должно решить проблему. Но а в целом я бы порекомендовал почитать статьи про двойную буферизацию.
Correct answer by AvtPhenix on February 27, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP