No meu jogo XNA no modo janela, quando o usuário redimensiona a janela, o jogo para de atualizar a janela e o último quadro desenhado é esticado e distorcido até que o usuário libere o mouse e o redimensionamento seja concluído.
Existe alguma maneira de o jogo continuar rodando "normalmente", atualizando quadros e redesenhando a tela durante o evento de redimensionamento?
Sei que manter o loop de renderização durante o redimensionamento pode não ser possível ou recomendado, porque os recursos gerenciados por hardware são continuamente criados e destruídos, mas existe alguma maneira de interromper o alongamento feio? Idealmente, deixando o quadro existente sem escala no canto superior esquerdo ou com uma tela preta, se isso não for possível.
Respostas:
Há pelo menos três mensagens que você pode acompanhar.
WM_SIZE
- redimensionamento de janelas, mini / maximização, comutação em tela cheia / janelas. Você deve ler o wParam para descobrir o que exatamente aconteceu e lParam para o tamanho atual.WM_ENTERSIZEMOVE
- inicia o redimensionamento da janela no modo janelaWM_EXITSIZEMOVE
- redimensionar a janela final no modo de janelaGeralmente, você não deseja redimensionar seu aplicativo a cada quadro entre WM_ENTERSIZEMOVE e WM_EXITSIZEMOVE, porque é muito lento e feio. Mas tente, certamente é mais do que alongar, talvez você goste =)
fonte
System.Windows.Forms.Form.WndProc()
. Ao trabalhar no XNA, você não tem acesso direto aForm
para substituir esse método. Embora seja possível, não é uma quantidade trivial de trabalho e teria que contornar o design do XNA.