Мне просто интересно, может ли кто-нибудь пролить свет на это для меня. Я кодировал C# в течение многих лет, но даже не затрагивал ничего в пространстве имен System.Drawing, кроме класса bitmap, и я следил за некоторыми учебниками и придумывал какой-то код, который работает. Я разрабатываю 2D Game Engine, а приведенный ниже код предназначен для графического движка, который использует GDI. Однако я просто не понимаю, как работает этот код. Вот он:Как работает этот код? (GDI, C#)
private Graphics frontBuffer;
private Graphics backBuffer;
private Bitmap backBufferBitmap;
public void Initialize()
{
backBufferBitmap = new Bitmap(game.Form.Width, game.Form.Height);
frontBuffer = game.Form.CreateGraphics();
backBuffer = Graphics.FromImage(backBufferBitmap);
}
public void Update()
{
try
{
frontBuffer.DrawImageUnscaled(backBufferBitmap,0,0);
backBuffer.Clear(Color.Black);
}
catch(Exception e)
{
throw e;
}
}
Итак, основная часть меня сбивает с толку;
Как обновляется растровое изображение заднего буфера? и почему буфер обратно очищается, а не передний буфер?
Кроме того, метод initialize вызывается один раз, и метод обновления вызывается один раз для каждого кадра в цикле while.
Только для записи. У меня есть некоторые сомнения относительно кода, который вы нашли или написал как 'game.Form.CreateGraphics();' обычно это плохая идея, как и буферизация объекта Graphics. – TaW
Но почему? Все, что я делаю, действительно ссылается на объект графических форм? –
Нет такой вещи. Вы (sic!) Создаете один. Но вы не должны. Это событие «Paint» для этого! (Если вам не нужен один в другом месте, потому что вы хотите измерить вещи или хотите нарисовать графику __non-persistent__ как линию резиновых полос ..) - Также: Frontbuffer очищается неявно, поскольку он ничего не содержит при создании его растрового изображения. – TaW