Artigo
Integrando XNA com WPF
Integração por intermédio de controles Windows Forms hosteados numa Window do WPF
Enviado por Luciano José em 2/5/2009 0:00:00

Introdução
Este pequeno artigo visa demonstrar de maneira simplificada o caminho para se renderizar um jogo feito em XNA dentro de uma Window do WPF. Para obter tal resultado precisamos de um componente do Windows Forms que derive da classe Control a fim de intermediar a operação.
Vamos precisar da propriedade Handle de um Control para “jogarmos” a imagem do jogo nesse controle. Isso será feito através do método GraphicsDevice.Present .
Etapa 1 – Projeto WPF
Crie um projeto Wpf Application. Feito isso você vai precisar adicionar referência a estas “dlls” abaixo:
Dll
Path
WindowsFormsIntegration.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
System.Windows.Forms.dll
C:\Windows\Microsoft.NET\Framework\v2.x.xxx
 
Isso vai ser necessário para utilizarmos o componente WindowsFormsHost no “Grid”da Window. Aonde utilizaremos algum container do Windows Forms para jogarmos a imagem nesse container.
No exemplo que libero para download, eu coloquei um Panel dentro do WindowsFormsHost.
Obtendo este resultado:
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1"
 xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">    
    <Grid>
        <WindowsFormsHost Name="winformshost1">
            <wf:Panel Name="panel1" />
        </WindowsFormsHost>
    </Grid>
</Window>
Etapa 2 – Projeto XNA
No projeto XNA Windows Game, adicione uma referência para o projeto WPF criado acima.
Você também vai precisar adicionar referência para as dlls abaixo:
Dll
Path
WindowsBase.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
PresentationCore.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
PresentationFrameWork.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
System.Windows.Forms.dll
C:\Windows\Microsoft.NET\Framework\v2.x.xxx
 
Ao final de tudo, sua Solution Explorer deve parecer com esta imagem:



Conclusão
No fim, temos o frameWork do XNA renderizando imagens para um controle Windows Forms, que por sua vez, está sendo “hosteado” numa Window do WPF.
Em suma, a ordem do caminho das imagens renderizadas fica assim: XNA -> Controle Windows Forms -> WPF
Por enquanto, não deve haver muita vantagem na integração com o WPF e dependendo de como for feito, pode dificultar o porte para Zune ou Xbox 360. Sem contar que o processo de integração com o Windows Forms é mais simples e estável, se tornando, por enquanto,  uma opção melhor que a integração com o WPF. Se você quer, por exemplo, criar um Editor de Level integrado com o seu jogo, faça uma análise e um estudo mais apurado para ver se realmente vale a pena usar WPF!
Alguns controles parecem não funcionar bem, como é o caso do TextBox do WPF!
Faça o download de um exemplo sobre este artigo logo abaixo.
Dúvidas, Críticas ou sugestões? Obrigado!


Arquivos Anexados
XNA_WPF_Example Download
Sobre o Autor

lucianoJose
Luciano José
Administrador do SharpGames. Blog: lucianojosefj.spaces.live.com

Clique para avaliar:

Comentários

Adicione seu Comentário  Voltar
Translator
Logos do XBox 360, XNA e Games For Windows
Copyright 2010 por SharpgamesPolítica de Privacidade  |  Termos de Uso