2010-07-27 11 views
6

In C# WinForms, wenn ich hier oder dort ein kleines Spiel mache, würde ich eine schnelle Klasse schreiben, die eine Unterklasse von System.Windows.Forms.Panel und im Konstruktor DoubleBuffered auf true gesetzt hat. Dann könnten Sie die OnPaint-Methode überschreiben, um Spielelemente anzuzeigen. Ich habe das jetzt seit 2 oder 3 Jahren gemacht, aber ich versuche wirklich, WPF und XAML zu umarmen, ich mag es wirklich für normale Anwendungslayouts. Was gibt es dazu in WPF?C# WPF OnPaint Methode Alternative?

Antwort

3

Nicht die Antwort, die Sie suchen, aber: Sie sollten WPF nicht für Spiele verwenden. Bleiben Sie bei Forms (die nicht von MS gelöscht werden, da WPF Forms nicht ersetzt) ​​oder versuchen Sie XNA, wenn Sie zur nächsten Ebene wechseln möchten.


UPDATE: ich die Frage sehr schnell gestern beantwortet, weil ich in Eile und war, weil ich auch in WPF um sah Spiele zu tun, also habe ich wollte nicht das OP nach links ohne die richtige Antwort. Hier

ist der Deal:

WPF Ziel ist reich UI-Entwicklung zu vereinfachen. Erstens, MS hat verstanden, dass Formen der Art der Kodierung Verhalten mit Präsentation mischen. Dies ist sowohl für das Anwendungsdesign als auch für die Wartbarkeit schlecht. Außerdem muss in Forms alles codiert werden; Die Bibliothek selbst tut sehr wenig für den Benutzer. Wenn Sie beispielsweise eine Schaltfläche mit einem anderen Aussehen möchten, müssen Sie die Methode Draw überschreiben und dann irgendwie die Grafik zeichnen, die sie darstellt.

Mit WPF, Verhalten ist von der Präsentation getrennt. Zum Beispiel, was ist eine Schaltfläche? In Windows wissen wir, dass es sich um eine Box mit abgerundeten Ecken handelt, aber schauen Sie sich um ... Ihr Maus-Scroll ist auch eine Schaltfläche, obwohl sie nichts mit der Windows-Standardschaltfläche zu tun hat. Ein Knopf zu sein bedeutet, ein bestimmtes Verhalten zu haben (meistens klickend) und nicht wie eine Schachtel auszusehen. Mit WPF ist das sehr einfach. Sie definieren eine Schaltfläche und verwenden dann beispielsweise ein Bild oder einen Text, um sie dem Benutzer zu präsentieren.

All dies kostet natürlich; WPF ist beispielsweise langsamer als Formulare. Spiele müssen schnell sein und versuchen, keine Ressourcen zu verschwenden. In Spielen neigt jedes Verhalten dazu, kodiert zu werden (nicht die UI, natürlich), jede Präsentation ist angepasst (eine 2D-Grafik oder ein 3D-Objekt), so dass Sie sowieso viel programmieren müssen. Sie verwenden also eine teure Technologie, aber werfen die meisten ihrer Vorteile weg.

Aber ich bin kein Spezialist. Sie können this Blog überprüfen, wo ein Ex-Microsoft-Mitarbeiter versucht, für fast zwei Jahre, WPF für Spiele zu verwenden. Und er schließt:

Sie haben wahrscheinlich bemerkt, dass der Blog seit einer Weile nicht aktualisiert wurde. WPF Leistung scheint einfach nicht dort für ernsthafte Spiele zu sein, und ich habe geworfen in das Handtuch und wird auf Spiele mit XNA arbeiten. Ich denke einfach nicht es lohnt sich, das WPF Framework zu kämpfen ...

Von dort habe ich die meisten meiner Schlussfolgerungen gezogen.

+1

Ich will nicht eine Technologie auf das Projekt erzwingen. Wenn WPF keine richtige Alternative ist, kann ich das akzeptieren. –

+1

Warum sind Formulare für Spiele besser geeignet als WPF? –

+2

Der andere Blogger hat offensichtlich WPF mit XNA/DirectX verglichen, nicht mit Forms. Weder WPF noch Forms sind für "ernsthafte" Spiele geeignet, aber ich kaufe nicht, dass Forms langsamer als WPF ist. Forms bietet * keine * Hardwarebeschleunigung und, wenn Sie irgendeine Art von Spezial-Rendering machen wollen, werden Sie sowieso Ihre eigenen Pixel auf der CPU zeichnen. Wenn Sie nicht Tausende von Bildschirmobjekten jonglieren (was bei Verwendung von Pinseln nicht erforderlich ist), ist WPF in der Regel schneller. Außerdem bietet WPF Shader und grundlegende Hardware-Beschleunigung für praktisch alles - Tiling, Größenanpassung, Sie nennen es. –

1

Es gibt ein paar Container, um Sachen anzuzeigen. Dasjenige, das Sie verwenden möchten, ist ein Canvas (das einzige mit Koordinatensystem) some more details

Der Schlüssel ist, welche Art von Spiel Sie sind. Unter Verwendung von XAML könnte es ein einfaches App-ähnliches Spiel sein (einfache Zeichnungen und so weiter). Für etwas mehr in Betracht ziehen, XNA zu verwenden. Der Vorteil von xaml besteht darin, dass es einfach ist, über Handler mit dem Benutzer zu interagieren, zB ist es einfach, eine Zeichenfolge auf den Bildschirm zu schreiben, die für XNA etwas schwieriger ist. Mit xmal könntest du auch ein Spiel für IE (XABP), Windows Phone und Silverlight machen.

Was Sie mit Form gemacht haben, ist ein bisschen Loop-Stil-Spiel.

Aktualisierung(); Farbe();

und das passt XNA mehr. Wenn Sie jedoch WPF und Xaml verwenden möchten, verwenden Sie Canvans und LayoutUpdate Handler.

0

Sie können versuchen, ein Fenster Hinzufügen bildet benutzerdefinierte Sonde in WPF einen WinForms-Host verwenden und dort Zeichnung mit OnPaint

//WPF XAML 
<WindowsFormsHost x:Name="formsHost" HorizontalAlignment="Left" Visibility="Visible" Grid.Column="0" Grid.Row="0"></WindowsFormsHost> 


//WPF CodeBehind 
YourCustomWinFormsControls panel = new YourCustomWinFormsControls(); 
     panel.Width = XXX; 
     panel.Height = XXX; 
     formsHost.Child = panel; 

//WinForms Custome Control Code 

protected override void OnPaint(PaintEventArgs pe) 
    { 
     //DO STUFF HERE 
     base.OnPaint(pe); 
    } 
Verwandte Themen