Я программирую клон tetris для моего проекта школы C#. Я использую Microsoft Visual Studio 2012. Сама игра реализована как двухмерный массив блоков (список списков блоков), и каждый блок имеет свою собственную текстуру (изображение bmp). Я рисую весь массив на элемент управления PictureBox, и здесь начинается проблема. При обновлении изображения на PictureBox (перемещение/вращение активной фигуры) игра немного отстает. Я попытался использовать панель управления, но результат был таким же. У меня есть общее представление о том, что может вызвать отставание, но я точно не знаю, как избавиться от него.C# Тетрис игра медленная производительность
Это метод Жеребьевка игры «сетки»:
public void Draw(Graphics g)
{
Brush brush;
Font font = new System.Drawing.Font("Arial", 5);
for (int i = 0; i < Width; i++)
for (int j = 0; j < Height; j++)
{
brush = new TextureBrush(Blocks[i][j].Texture);
if (Blocks[i][j].Occupied==true)
g.FillRectangle(brush, i * 20, j * 20, i * 20 + Blocks[i][j].Texture.Width, j * 20 + Blocks[i][j].Texture.Height);
}
}
Это метод рисования активного Tetromino:
public void Draw(Graphics g)
{
Brush brush = new TextureBrush(Blocks[0].Texture);
foreach (FullBlock b in Blocks)
g.FillRectangle(brush, b.x * 20, b.y * 20,b.Texture.Width, b.Texture.Height);
}
Сама игра затем использовать оба из них (двойной буферизация попытка):
public void GameDraw(PictureBox p)
{
Graphics g = Graphics.FromImage(gb);
gameGrid.Draw(g);
PlayingShape.Draw(g);
p.Image = gb;
p.Refresh();
}
где "gb"
является частным Bitmap
v Я могу создать один раз в конструкторе класса (чтобы сократить (неудачно) отставание).
Метод GameDraw
вызываются всякий раз, когда состояние игры изменяется (например, перемещение/вращения активного Tetromino и все «сила тяжести» тика)
Вы не делаете нужно использовать иллюстрацию, использовать стандартный GDI + рисунок, и он будет работать * много быстрее. – Tigran
if (Блоки [i] [j] .Occupied == true) <--- Не делайте этого. просто используйте .Occupied, который возвращает логическое значение. –