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

Nightmares

Frischling

  • »Nightmares« ist der Autor dieses Themas

Beiträge: 25

Beruf: Student

  • Private Nachricht senden

1

24.01.2014, 19:44

GUI Events

Hallo,

Ich schreibe aktuell eine kleine GUI in C# mit SFML.
Das Problem, vor dem ich stehe ist, dass ich bei z.B. einem Klick auf einen Button in der Button Klasse eine Prozedur aufgerufen wird, die dann wiederum eine zugewiesene Prozedur starten soll.

Und ja ich weiß, dass man dazu in Sekundenschnelle auf Google den nötigen Code findet.
Nur ich suche jetzt schon knappe zwei Stunden und finde anscheinend einfach nicht die richtigen Suchbegriffe :(

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

2

24.01.2014, 19:58

Bei einem Mausklick prüfst du was angeklickt wurde, ein Button oder irgendwas anderes. War es ein Button, musst du bei diesem eine Methode aufrufen.


Pseudocode

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
if(Linksklick) 
{ 
        for(int i = 0; i < Anzahl;i++) 
        { 
                if(Mausposition innerhalb des Buttonrechtecks) 
                { 
                         Buttons(i).DoSomething(); 
                 } 
        } 
}






EDIT: Wie macht man das Einrücken? Ich habe jetzt einfach Leerzeichen benutzt :D bisher habe ich immer CopyPaste benutzt um Code einzufügen.

Nightmares

Frischling

  • »Nightmares« ist der Autor dieses Themas

Beiträge: 25

Beruf: Student

  • Private Nachricht senden

3

24.01.2014, 20:09

Versuch ich mich mal etwas genauer auszudrücken...
Ich habe eine Klasse Button.
Will ich jetzt einen Button auf dem Bildschirm anzeigen erstelle ich eine Instanz und übergebe Text, Position etc.
Ich habe das ganze für einen Gameloop ausgelegt.

Also gibt es eine Stelle im Code, in dem ich Aktionen des Nutzers prüfe.
An dieser Stelle sage ich dann bisher "buttonname.Click()".
Diese Funktion innerhalb der Buttonklasse überprüft dann, ob der Button geklickt wurde.
Falls dies der fall ist soll innerhalb der Prozedur Click in der Button Klasse eine variable gewünschte Prozedur ausgelöst werden!

Die Abfrage die du mir geschrieben hast existiert bereits innerhalb der Button Klasse!
Ich habe mir eine Klasse GUI geschrieben, die sich die Menüstruktur aus XML-Dateien holt und das Startmenü aufruft.

Das Menu hat eine Liste von Elements, die innerhalb des Menüs angezeigt werden sollen.
Vom Typ Element leitet sich dann auch der Button ab.

So sage ich im Gameloop nur noch "GUI.CheckEvents()" und GUI checkt alle Elements in seiner Liste(Array) im aktuell gezeigten Menü.

Hoffe, dass meine Frage jetzt klarer geworden ist.. :D

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

4

24.01.2014, 20:20

Okay, dann habe ich dich erst falsch verstanden.

Bei mir ist es so, dass die Buttons wissen was sie tun sollen, zB Quitgame, SaveGame oder was auch immer. Wenn dann auf einen Button geklickt wurde, liefern sie einen entsprechenden Wert zurück, durch diesen Wert ermittle ich dann was weiter gemacht wird.

In deinem Fall soll anscheinend der Button selber diese Funktion starten, du könntest das zB durch ein Switch() regeln.

Also der Button wird angeklickt und übergibt dann an eine Funktion einen Wert, der Wert soll aussagen was der Button auslösen will. Diese Funktion wertet den wert aus und ruft dann die entsprechende Funktion (zB "Quitgame()) auf.



Ich hoffe ich habe dein Problem dieses mal richtig verstanden :D

Nightmares

Frischling

  • »Nightmares« ist der Autor dieses Themas

Beiträge: 25

Beruf: Student

  • Private Nachricht senden

5

24.01.2014, 20:27

Ich habe das ganze schon mal gesehen, als ich mit einem Profi zusammen etwas gebastelt habe.
Der hat irgendeine Funktion namens "EventLIstener" o.ä. genutzt.
Somit war er in der Lage der Funktion mit "+aufzurufeneProzedur" dieser Variable, wenn man es so nennen kann, die Funktion als Wert zuzuweisen.

Er hat also nachher von der Prozedur im Button etc. aus nur noch den Varibelnnamen schreiben müssen um die entsprechende Prozedur auszuführen.

Das Problem bei Switch Case wäre, dass ich die geschaffenen Librarys für jedes neue Projekt ändern müsste.
Ich möchte nämlich, da ich mich etwas mit Spieleprogrammierung(warum bin ich wohl in diesem Forum ;) ) beschäftige, für jedes meiner Projekte einfach nutzen können und nicht jedes mal etwas ändern müssen bzw. hinzufügen müssen.

So schaffe ich mir für alle meine Spiele und grafischen Programmen eine Basis.

Und ja ich könnte eine vorgefertigte GUI nehmen, aber ich will ja etwas lernen :D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

24.01.2014, 23:52

Such mal nach:
- Signal Slot C++
- std::function C++

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

Nightmares

Frischling

  • »Nightmares« ist der Autor dieses Themas

Beiträge: 25

Beruf: Student

  • Private Nachricht senden

9

25.01.2014, 11:32

Danke für den Link :dash:
EventListener war das Keyword dass ich gesucht habe :rolleyes:

Werbeanzeige