Я хочу запрограммировать небольшую игру на C#. На данный момент есть только квадраты, но я расскажу позже.Рисунок на C# (Offscreen)
Таким образом, на заднем плане происходит много вещей, таких как обнаружение столкновения, движение пули, движение игрока, фокусировка на «камере» на игроке (и вражеский ИИ в будущем). Для выполнения всех этих задач у меня есть таймер с интервалом в 10 миллисекунд. С каждым тиком физика «слушается», и экран будет перерисован.
Теперь проблема: экран мерцает, ... не так уж плохо, но я думаю, что будет еще хуже, когда я добавлю больше вещей. Я попытался нарисовать изображение на экране и нарисовать его потом, как целое изображение на экране. Но мне нужно создать несколько объектов Bitmap и Graphics, и примерно через 30 секунд программа будет использовать как 2 ГБ ОЗУ.
public void Draw()
{
Bitmap bmpMap = new Bitmap(Map.Width, Map.Height);
Graphics gphMap = Graphics.FromImage(bmpMap);
Bitmap bmpWeapon = new Bitmap(WeaponSector.Width, WeaponSector.Height);
Graphics gphWeapon = Graphics.FromImage(bmpWeapon);
DrawMap(gphMap);
DrawWeaponSector(gphWeapon);
Map.CreateGraphics().DrawImage(bmpMap, 0, 0);
gphMap.Dispose();
WeaponSector.CreateGraphics().DrawImage(bmpWeapon, 0, 0);
gphWeapon.Dispose();
}
Примечание: Я не рисую непосредственно на форме, а в панелях. Они называются Map (здесь происходит действие) и WeaponSector (здесь вы можете увидеть свое текущее оружие и боеприпасы).
и вопрос) – user1956570
Вы могли бы попытаться сделать рисунок асинхронной в физике часть?. Таким образом, вы можете контролировать частоту кадров чертежа независимо от фактического игрового режима. Частота кадров кадров, скажем, 40 кадров в секунду, должна быть достаточной. –
Не используйте CreateGraphics, это только временный чертеж. Используйте рисунок для панелей или форм для рисования. – LarsTech