Parece que o WPF foi criado como a resposta do aplicativo para o Flash da Adobe. O Silverlight é usado para criar páginas da web. Mas, essa mesma funcionalidade pode ser inserida em um aplicativo WPF independente. O Scaleform permite que o Flash seja usado em jogos C ++ não gerenciados. O WPF pode ser usado para criar o mesmo tipo de interfaces? O que li parece me fazer acreditar que pode. Mas não vi nenhuma planilha de aplicativos que mostrasse esse tipo de interface.
7
Respostas:
O WPF foi criado para fornecer uma maneira melhor para os desenvolvedores do Windows criarem GUIs para aplicativos de desktop. O Silverlight foi criado como uma resposta ao Flash e reutiliza grande parte da API do WPF, mas tem uma implementação diferente.
Em teoria, você poderia usar o WPF para criar a GUI para um jogo, mas na prática você provavelmente não faria: -
Existe a possibilidade de que essa situação possa ser resgatada. Há uma reimplementação de código aberto do .NET chamada Mono. Eles têm um subprojeto chamado Moonlight que é uma reimplementação do Silverlight. Com o código-fonte disponível, é possível integrá-lo de forma semelhante ao Scaleform e permitir criar GUIs usando a excelente ferramenta de autoria do Expression Blend da Microsoft. Eu não acho que alguém tenha feito isso ainda, então provavelmente há questões a serem descobertas, mas estou apenas lançando isso como uma idéia.
EDIT: Ocorreu-me depois de adicionar isso que talvez seu interesse não seja tanto em alavancar ferramentas de autoria como o Flash Studio ou o Expression Blend e talvez você só queira desenhar gráficos 2D de alta qualidade rapidamente. Nesse caso, há a API do Direct2D que a Microsoft adicionou no Windows 7 e depois portou para o Vista.
fonte
Definitivamente, você pode criar tipos semelhantes de interfaces no WPF, mas integrá-las a um jogo Direct3D é problemático. Você pode hospedar conteúdo do Direct3D no WPF (via
D3DImage
), mas o conteúdo 3D seria composto no aplicativo WPF, para que a renderização se torne dependente do WPF. Conseqüentemente, você pode ter um desempenho relativamente ruim, pois está limitado pela taxa de quadros do WPF. Além disso, como U62 observou em seu comentário, o WPF pode hospedar apenas o conteúdo do Direct3D 9 (em oposição ao Direct3D 10/11). No entanto, você pode contornar isso, poisIDirect3DDevice9Ex
é capaz de compartilhar recursos entre dispositivos. Portanto, você pode criar um destino de renderização compartilhado no Direct3D 10 ou 11 e trazê-lo para o WPF por meio de umIDirect3DDevice9Ex
dispositivo intermediário . Jeremiah Morrill discute essa técnica aqui .Uma alternativa, embora longe de ser elegante, seria renderizar a interface do usuário do WPF em uma janela em camadas separada acima do conteúdo do Direct3D, conforme descrito aqui .
Também existem maneiras de acessar a superfície interna do Direct3D do WPF , o que permitiria hospedar o conteúdo do WPF em uma cena externa do Direct3D (em vez do contrário). No entanto, esse é um truque bastante desagradável e pode ser facilmente quebrado por versões futuras do WPF.
Obviamente, nada disso é relevante se você realmente não precisar interoperar com o Direct3D. Jogos que não exigem gráficos 3D complexos certamente podem ser desenvolvidos completamente no WPF . O WPF possui algumas instalações 3D simples à sua disposição, embora geralmente sejam insuficientes para qualquer coisa além de formas primitivas com texturas simples. Ele também suporta sombreadores de pixel personalizados, embora existam muitas restrições (por exemplo, devem ser efeitos de passagem única).
fonte