C# unload-und load-Formular ein - / ausblenden und schließen
Ich bin Codierung einer einfachen sidescroller in C# mit Windows forms-Anwendungen. Ich will es so, wenn der Spieler berührt eine exit-Stelle, diese sofort lädt eine neue Ebene.
Um dies zu implementieren, nutze ich den folgenden code:
if (player.Bounds.IntersectsWith(exit.Bounds))
{
Form2 myNewForm = new Form2();
myNewForm.Visible = true;
this.Hide();
}
Dieser funktioniert. Jedoch lädt es zahlreiche Instanzen von form2 - ich möchte nur, dass es zu laden, sobald. Ich weiß nicht, wie diese zu schreiben (sorry, ich bin ein Neuling - es dauerte eine Weile, nur um dieser code zu schreiben!).
Auch, laden Sie eine Ebene über eine neue form ist ineffizient. Gibt es eine Möglichkeit zum entladen der offenen form zu laden, die nächste in der gleichen Fenster/Instanz, anstatt ein weiteres separates Fenster?
Sorry, wenn dies ist, ist noch unklar. Ich habe mein bestes getan, Forschung + ich bin neu. Bitte nicht erwähnen XNA! Danke.
- Blick auf das singleton-Muster verwenden: stackoverflow.com/questions/1403600/...
- Lesen Sie die Kommentare, sehe ich, dass das geklärt ist. Sollten Sie die Antwort, die am besten erfüllt Ihre Bedürfnisse. That being said, zu Experimentieren mit meinen eigenen winforms-Spiel, ich war kein fan von dem ständigen öffnen und schließen von Fenstern zwischen den 'levels'. Die route, die ich nahm, war ein Haupt-Fenster-die befindet sich eine Menü-Leiste und alle Benutzersteuerelemente, die vertreten alle levels oder maps oder was auch immer. Das Hauptfenster nur diktiert, die UserControl sichtbar war, ähnlich wie zmechanic Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie eine kleine änderung an Ihrem Projekt ist Programm.cs-Datei, ändern Sie die Art und Weise Ihre app entscheidet, zu beenden. Dich einfach verlassen, wenn es nicht mehr von windows übrig. Machen Sie es wie folgt Aussehen:
Nun ist es einfach:
Können Sie
Application.OpenForms[]
Sammlung zum abrufen der Formular Geöffnet Instanz und es dann Zeigen.Versuchen Sie Dies:
Form2
stattForm1
(wenn Sie nicht ändern Sie) versuchen Sie dies:Form2 frmMyForm = (Form2)Application.OpenForms["Form2"];
Das eigentliche problem ist nicht in Ihrem Formular geladen werden mehrmals, aber in Ihrem Spiel-Logik nicht unterbrochen, wenn das Ende der Ebene erreicht ist. Es bedeutet, dass Ihr Spiel weiterhin spielen eine alte Ebene, wenn ein neues level bereits geladen wurde.
Wenn Form1 das Hauptformular dann Ihre ganze Anwendung wird heruntergefahren. Sie müssen bootstraper, welche den Einstiegspunkt der Anwendung, nicht die Form1. Wenn Sie tun, dass Ihre Form1 wird ein Kind im gleichen Sinn, wie wird Form2. Sie können öffnen und schließen Sie Sie ohne ein Herunterfahren der Anwendung. Wenn Sie nicht wissen, wie zu tun, erstellen Sie einfach ein weiteres leeres Formular, nennen wir es mal Main und machen Sie den Start-Formular Ihrer Anwendung. Dann verstecken Sie es, und öffnen Sie Form1 aus Haupt-Formular als Modal. Dann, wenn Sie komplette Ebene in Form1 schließen Sie Form1, die code flow zurück zum Hauptformular, und Sie werden laichen Form2 aus Haupt-Formular als Modal. Sie haben vollkommen vorhersehbaren Logik, wo alle Formulare geöffnet werden, die aus einer einzigen kontrollierten Platz.