Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

21

26.01.2014, 22:14

Wie gesagt, es ist ein absolut grundlegendes Beispiel an dem noch einiges gemacht werden kann.
Beim Registrieren des Events kannst und musst du es bei dieser Umsetzung sowieso behalten. Dann kannst du es wie in meinem vorherigen Pseudocode verwenden. Für eine direkte Weiterleitung brauchst du eine "Listener" Basisklasse oder Methodenpointer.

Das GUI-System meldet das Mausklickevent und bei bedarf die Tastenevents beim Eventmanager an und löst die bei den GUI-Elementen gespeicherten Events aus. Da die hoffentlich Baumartig aufgebaut sind hast du fast direkten Zugriff und musst nicht alle Elemente durchgehen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

22

26.01.2014, 22:19

Erstelle ich jeweils ein Event für jeden Button und wenn der Button angeklickt wurde, sagt der eventmanager dem UI: Pass auf, Button x wurde geklickt?

Oder erstellt das UI ein Klick event und wenn ein Mausklick erfolgt ist, sagt der Eventmanager dem UI: Passa auf, an der stelle wurde ein Linksklick gemacht, werte mal aus was du jetzt damit machst?


Bei der ersten Methode habe ich ja irgendwann 5000 events. Bei der zweiten Methode aber wieder den Fall, dass die eigentliche Auswertung die Methode selber übernimmt, was ja eigentlich nicht so passieren soll, oder doch?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

23

26.01.2014, 22:40

Der Pseudocode macht ohne Erweiterungen natürlich nicht viel Sinn. Momentan könnte man die Events noch lokal Speichern und das Update selbst aufrufen. Das ändert sich aber sobald du etwas weiter daran arbeitest. Ich wollte dir nur etwas geben womit du anfangen kannst. Eine Komplettlösung gibt es von mir sowieso nicht.

Eigentlich sollte es so sein: Das GUI-System sagt dem Event, in welchem Fall es sich zurückmelden soll, verstaut es im Eventmanager und wartet auf einen Aufruf der übergebenen Methode. Der Eventmanager sorgt nur dafür, dass Update aufgerufen wird und sollte eine Verwaltung für Events haben die speziell behandelt werden müssen. Das wird notwendig, wenn du die Eventschleife nutzen möchtest, was ich dir sehr empfehlen würde.

Der Code, der das Event zum GUI-Element weiter leitet sollte sich in der Klasse befinden, die das GUI verwaltet. Die Eventschleife schickt den Mausklick zum Verwalterobjekt für Mausinputs, das sich im Eventmanager befinden sollte, das schickt die Nachricht weiter zum Event, das Event schickt sie zum GUI(das dieses Event ja erstellt hat), das GUI-System leitet es weiter zum Element, welches wiederum seine Events auffordert ihre Methode über den Pointer aufzurufen.

Damit wäre alles dort wo es hin gehört.

Ich weiß das klingt für dich sicher alles so kompliziert, dass du dich fragst ob es diesen Aufwand wert ist. Es wird aber der Tag kommen, an dem du etwas erledigen willst, dir denkst "das wird ewig dauern" und nach 5 Minuten fertig bist, weil du ein gutes Design verwendet und die Abhängigkeiten gering gehalten hast.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

24

26.01.2014, 22:59

Zitat

Der Code, der das Event zum GUI-Element weiter leitet sollte sich in der Klasse befinden, die das GUI verwaltet. Die Eventschleife schickt den Mausklick zum Verwalterobjekt für Mausinputs, das sich im Eventmanager befinden sollte, das schickt die Nachricht weiter zum Event, das Event schickt sie zum GUI(das dieses Event ja erstellt hat), das GUI-System leitet es weiter zum Element, welches wiederum seine Events auffordert ihre Methode über den Pointer aufzurufen.


Oha, das ist mal ein Satz :) , damit meine ich, er ist gut, aber kompliziert zu verstehen :)

Soll es heissen:
Der Eventmanager sagt den Mausevents, dass die linke Maustaste gedrückt wurde. Diese wiederum gucken ob sie mit dieser Information etwas anfangen können, wenn ja sagen sie der jeweiligen Klasse (hier dem GUI), dass an die und die Stelle geklickt wurde. Das GUI sagt dann dem Element an der Stelle, dass es angeklickt wurde und dieses Element macht dann, was auch immer es machen soll?


Hier noch mal ein Beispiel, wie ich es vielleicht machen würde:


(Link)

(Ein Bild von Warcraft 3, von einer zufälligen Seite, um meine Ideen zu verdeutlichen) Ich denke mal jeder hier kennt Warcraft 3.

Als GUI bezeichne ich in diesem Bild die untere und die obere Leiste. Nun hat jede dieser Leisten eine feste Anzahl an Buttons, aber jeder Button kann je nach Situation etwas anderes machen. Wäre es sinnvoll, bei einem GUI, welches so aufgebaut ist, für jeden Button ein Event zu erstellen, aber eben nicht für jede Möglichkeit?

So würde an das GUI immer gemeldet werden, dass ein Button geklickt wurde, das GUI sagt dem button, dass er geklickt wurde und der Button macht dann irgendwas.
Beispielsweise wird an Button x gemeldet, dass er angeklickt wurde. In einer Siutation sagt er dem Held er solle einen Angriff machen(wobei das wohl schon wieder ein event wäre :D) und in der nächsten einem Peon er solle eine Kaserne bauen.


Wäre meine grade beschriebene Weise gut und sinnvoll, oder bin ich imemrnoch auf dem falschen Dampfer ?


Ja, damit hast du recht NachoMan, bisher ist es ziemlich kompliziert :thinking:

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

25

26.01.2014, 23:12

Die Buttons sollten selbst Events enthalten, an die sie die Nachricht weiter senden.
Der Button bestimmt nicht, was bei einem Klick passiert sondern seine Events. Was die Events machen bestimmt der, der sie instanziiert bzw. ihre Klassen definiert. Ob es nun eine direkte Behandlung des Events oder seine Weiterleitung handelt bestimmst du.

Du wirst das Interface wohl sowieso von dem Objekt füllen lassen müssen, das gerade ausgewählt ist und recht viele Ableitungen der Eventklasse benötigen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (26.01.2014, 23:25)


ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

26

26.01.2014, 23:19

Bedeutet:

Also wäre der von mir beschriebene Weg eigentlich schon fast richtig?

Zitat

Der Eventmanager sagt den Mausevents, dass die linke Maustaste gedrückt wurde. Diese wiederum gucken ob sie mit dieser Information etwas anfangen können, wenn ja sagen sie der jeweiligen Klasse (hier dem GUI), dass an die und die Stelle geklickt wurde. Das GUI sagt dann dem Element an der Stelle, dass es angeklickt wurde und dieses Element macht dann, was auch immer es machen soll?


Nur, dass das Element (in diesem Fall ein Button) nichts wirkllich selber macht, ausser ein neues Event zu triggern? ZB ein Heroevent, welches einen Spell castet? Dieses Event würde dann die Animation des Helden ändern und ihn halt einen Spell casten lassen?

Also führt das Mausklickevent am Ende dazu, dass ein anderes Event(durch den Button) aufgerufen wird?

Habe ich das soweit richtig verstanden?

(Eine riesige Kette von Event - das ist ja Wahnsinn :hmm: :D)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

27

26.01.2014, 23:36

Die Kette könntest du etwas verkürzen wenn du den Mausklick zuerst zum GUI schickst bevor du ihn zum Eventmanager weiter leitest. Wäre mir das bloß früher aufgefallen.
Aber du hast es richtig verstanden. Wieso sollte ein Event nicht andere Events auslösen können? Das macht das System ja so flexibel. Du kannst für alles Mögliche von der Eventklasse ableiten. Ob du nun ein Event exakt alle 3 Minuten oder für 3 Minuten auslösen möchtest. Ob es von einem Tastendruck, einem Zufallsgenerator, über das Netzwerk oder von einem NPC aktiviert wird. Fast alles ist möglich. Du könntest sogar mehrere Events zu einem zusammenfügen. Dann hast du in ein Paar(ja groß geschrieben!) Minuten ein Event, das auf einen Tastendruck eines anderen Rechners reagiert, einen Countdown herunterzählt, dessen länge von einem Zufallsgenerator bestimmt wird und dann einen NPC startet, der den Gegner angreift.(hab versucht alle Beispiele unter einem Hut zu bekommen^^)
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

28

26.01.2014, 23:41

Okay, jetzt bin ich verwirrt :D

Der Input soll doch grade an den Eventmanager gegeben werden und der macht dann irgendetwas damit, ist das nicht der Anfang der gesamten Diskussion gewesen?

Aber dazu hätte ich nochmal eine Frage:

Ich bleibe mal beim Beispiel GUI, wenn ein Klick im GUI passiert ist, sagt das Event dem GUI, dass es angeklickt wurde und an welcher Position oder sagt das Event dem GUI, was genau angeklickt wurde(welcher Button)?


Also ein Mausklick GUI event vs ein Mausklick Event PRO anklickbares Element im GUI


PS.: Ich werde erstmal ins Bett gehen. Morgen früh im Datenbankenunterricht ähhmmm in der Pause, werde ich wieder antworten :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (26.01.2014, 23:49)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

29

26.01.2014, 23:49

Du musst sowieso sicher gehen, dass das GUI den Mausklick zuerst verarbeitet. Bei der Übergabe lässt du dir zurückgeben, ob überhaupt ein GUI-Element getroffen wurde. Wenn nicht landet der Mausklick beim Eventmanager. Somit hat der Eventmanager kaum noch etwas mit dem GUI zutun und anders herum. Das ganze GUI-System ist sogar selbst eine Art Eventmanager.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

30

27.01.2014, 10:55

Vielen Dank euch beiden ich denke jetzt habe ich alles verstanden :)

Ich werde mich da dran setzen und mich bei Bedarf wieder melden.

DANKE DANKE :) :thumbsup:

Werbeanzeige