Es scheint, dass WPF als Antwort der Anwendung auf Adobe Flash erstellt wurde. Silverlight wird zum Erstellen von Webseiten verwendet. Kann dieselbe Funktionalität jedoch in eine eigenständige WPF-Anwendung übernommen werden? Mit Scaleform kann Flash in nicht verwalteten C ++ - Spielen verwendet werden. Kann WPF verwendet werden, um denselben Schnittstellentyp zu erstellen? Was ich gelesen habe, scheint mich glauben zu lassen, dass es möglich ist. Aber ich habe keine Blätter von Anwendungen gesehen, die diese Art von Schnittstelle zeigen.
7
Antworten:
WPF wurde erstellt, um Windows-Entwicklern eine bessere Möglichkeit zum Erstellen von GUIs für Desktop-Anwendungen zu bieten. Silverlight wurde als Antwort auf Flash erstellt und verwendet die WPF-API weitgehend wieder, hat jedoch eine andere Implementierung.
Theoretisch könnten Sie WPF verwenden, um die GUI für ein Spiel zu erstellen, aber in der Praxis würden Sie wahrscheinlich nicht: -
Es besteht jedoch die Möglichkeit, dass diese Situation gerettet werden könnte. Es gibt eine Open-Source-Neuimplementierung von .NET namens Mono. Sie haben ein Teilprojekt namens Moonlight, das eine Neuimplementierung von Silverlight ist. Wenn der Quellcode verfügbar ist, besteht die Möglichkeit, dass er ähnlich wie Scaleform integriert wird und Sie GUIs mit dem hervorragenden Authoring-Tool Expression Blend von Microsoft erstellen können. Ich glaube, noch hat niemand dies getan, daher gibt es wahrscheinlich Probleme, die aufgedeckt werden müssen, aber ich werfe es nur als Idee raus.
BEARBEITEN: Nachdem ich dies hinzugefügt hatte, kam mir der Gedanke, dass Sie vielleicht nicht so sehr daran interessiert sind, Authoring-Tools wie Flash Studio oder Expression Blend zu nutzen, und dass Sie einfach nur in der Lage sein möchten, schnell hochwertige 2D-Grafiken zu zeichnen. In diesem Fall gibt es die Direct2D-API , die Microsoft in Windows 7 hinzugefügt und dann auf Vista zurückportiert hat.
quelle
Sie können definitiv ähnliche Arten von Schnittstellen in WPF erstellen, aber die Integration in ein Direct3D-Spiel ist problematisch. Sie können Direct3D-Inhalte in WPF (über
D3DImage
) hosten , aber Ihre 3D-Inhalte werden in die WPF-Anwendung integriert, sodass das Rendern von WPF abhängig wird. Infolgedessen kann es zu einer relativ schlechten Leistung kommen, da die Framerate von WPF begrenzt ist. Wie U62 in seinem Kommentar feststellte, kann WPF nur Direct3D 9-Inhalte hosten (im Gegensatz zu Direct3D 10/11). Möglicherweise können Sie dies jedoch umgehen, daIDirect3DDevice9Ex
Ressourcen zwischen Geräten gemeinsam genutzt werden können. Daher können Sie möglicherweise ein freigegebenes Renderziel in Direct3D 10 oder 11 erstellen und es über ein Zwischengerät in WPF bringenIDirect3DDevice9Ex
. Jeremiah Morrill diskutiert diese Technik hier .Eine Alternative, obwohl alles andere als elegant, wäre das Rendern Ihrer WPF-Benutzeroberfläche in einem separaten Fenster mit Ebenen über dem Direct3D-Inhalt, wie hier beschrieben .
Es gibt auch Möglichkeiten, auf die interne Direct3D-Oberfläche von WPF zuzugreifen , mit der Sie WPF-Inhalte in einer externen Direct3D-Szene hosten können (anstatt umgekehrt). Dies ist jedoch ein ziemlich böser Hack und könnte durch zukünftige WPF-Versionen leicht gebrochen werden.
Natürlich nichts davon ist relevant , wenn Sie nicht wirklich brauchen , mit Direct3D zu interagieren. Spiele, die keine komplexen 3D-Grafiken erfordern, können sicherlich vollständig in WPF entwickelt werden . WPF verfügt über einige einfache 3D-Funktionen, die jedoch im Allgemeinen nicht für primitive Formen mit einfachen Texturen geeignet sind. Es werden auch benutzerdefinierte Pixel-Shader unterstützt, obwohl es viele Einschränkungen gibt (z. B. müssen es sich um Single-Pass-Effekte handeln).
quelle