В моей игре XNA с оконным режимом, когда пользователь изменяет размеры окна, игра перестает обновлять окно, и последний нарисованный кадр растягивается и искажается до тех пор, пока пользователь не отпустит мышь и изменение размера не завершится.
Есть ли способ заставить игру продолжать работать "нормально", обновляя фреймы и перерисовывая экран, во время события изменения размера?
Я понимаю, что поддержание цикла рендеринга во время изменения размера может быть невозможным или не рекомендованным из-за того, что аппаратно управляемые ресурсы постоянно создаются и уничтожаются, но есть ли способ остановить уродливое растяжение? В идеале, если оставить существующий кадр в левом верхнем углу, или с черным экраном, если это невозможно.
Ответы:
Есть как минимум 3 сообщения, которые вы можете отслеживать.
WM_SIZE
- изменение размера окна, мини / максимизация, полноэкранное / оконное переключение. Вы должны прочитать wParam, чтобы узнать, что именно произошло, и lParam для текущего размера.WM_ENTERSIZEMOVE
- начать изменение размера окна в оконном режимеWM_EXITSIZEMOVE
- завершить изменение размера окна в оконном режимеОбычно вы не захотите изменять размер вашего приложения каждый кадр между WM_ENTERSIZEMOVE и WM_EXITSIZEMOVE, потому что он слишком медленный и уродливый. Но попробуйте, это, конечно, лучше, чем растяжение, может быть, вам понравится =)
источник
System.Windows.Forms.Form.WndProc()
. При работе в XNA у вас нет прямого доступа к a,Form
чтобы переопределить этот метод. Хотя это можно сделать, это не тривиальный объем работы, и он должен был бы обойти дизайн XNA.