Um mir das grundlegende Programmieren von Spielen beizubringen, werde ich einen Klon von Pong programmieren. Ich werde das Observer-Entwurfsmuster mit einer Schnittstelle zwischen der Eingabe und der Spiel-Engine verwenden. Ich bin mir jedoch nicht sicher, was die Schnittstelle tun soll. Eine Idee, die ich hatte, war, dass die Eingabeschnittstelle der Spiel-Engine mitteilte, dass (z. B.) auf den Bildschirm geklickt wurde, und dass die Spiel-Engine dann entscheiden konnte, was mit diesen Informationen geschehen soll (z. B. eine Kugel abschießen). Eine andere Idee, die ich hatte, war, dass die Eingabeschnittstelle nach dem Klicken mit der Maus die Spiel-Engine anweist, eine Kugel abzuschießen.
Welche Methode wäre für mich besser?
input
architecture
Shivam Sarodia
quelle
quelle
Antworten:
Die erste Methode ist eine Implementierung des Beobachtermusters, die zweite nicht. Das beobachtete Objekt (Ihre Eingabeschnittstelle) sollte nicht wissen müssen, was das beobachtende Objekt (Ihre Spiel-Engine) mit der Benachrichtigung macht, sondern nur, dass es benachrichtigt werden möchte.
Ich bin mir jedoch nicht sicher, warum Sie sich hier für das Beobachtermuster entschieden haben. Wenn Sie nicht mehrere Beobachter haben, scheint dies eine Komplikation zu sein, die vermieden werden kann. Wenn das Klicken immer das Gleiche bewirkt, muss die Spiel-Engine von der Benutzeroberfläche angewiesen werden, das eine zu tun. Wenn Sie die Dinge so einfach wie möglich halten, fällt es Ihnen leichter. Dies bedeutet nicht, dass Sie niemals Entwurfsmuster verwenden, aber im Allgemeinen nähern Sie sich ihrer Anwendung in die entgegengesetzte Richtung wie Sie. IE: Beginnen Sie mit dem Problem und wählen Sie das Entwurfsmuster aus, um es zu lösen, anstatt mit dem Entwurfsmuster zu beginnen und herauszufinden, wie Sie Ihr Problem damit lösen können.
quelle
Wenn Sie sich an das Observer-Muster halten möchten, muss dies die erste Idee sein. Das stärkste Argument, das ich mir vorstellen kann, ist, dass die Eingabeschnittstelle eine generische Komponente ist, die Sie wahrscheinlich auch in anderen Spielen wiederverwenden möchten. Es ist also sinnvoll, es frei von spielspezifischen Informationen zu halten, da Sie es sonst nicht in einem anderen Kontext verwenden könnten. Denken Sie im Allgemeinen sorgfältig über die Verantwortlichkeiten Ihrer Klassen nach und versuchen Sie, sie fokussiert und auf den Kontext der Klasse beschränkt zu halten.
quelle