TEvent - Was stelle ich damit an?
Übersicht

![]() |
DaysShadowBetreff: TEvent - Was stelle ich damit an? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Wie der Titel schon verrät würde ich gerne wissen, was ich mit Events anstellen kann bzw. ob die überhaupt zu empfehlen sind und wie man sie einsetzt. Ich habe mir zwar gestern das ganze angeschaut und was kleines geschrieben, aber da ich den Nutzen nicht ganz sehe weiß ich nicht genau ob ich es denn überhaupt richtig nutze oder nutzen würde. Im Prinzip habe ich einfach nur auf Tastendruck PostEvent mit einer entsprechenden ID genutzt und dann mit While( PollEvent( ) ) alle vorhandenen Events bearbeitet und den IDs entsprechend behandelt. Da mir das so aber als nicht sinnvoll erscheint, frage ich hier mal nach. MfG |
||
Blessed is the mind too small for doubt |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich habe mal ne GUI geschrieben, welche TEvents benutzt. Das ganze hat so funktioniert, das wenn ein Button gedrückt wurde, dieser auch ein TEvent emittiert hat, und man darüber eine Art messaging System hat. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
undefined |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich vermute, der Grundgedanke für dieses System ist es, eine Kommunikation zwischen ansonsten unabhängigen Modulen herzustellen. Vielleicht mag das an mancher Stelle sogar sinnvoll sein, aber ansich habe ich bisher immer bessere, einfachere Wege finden können, um diese Aufgabe zu lösen. Meine persönliche Meinung zu TEvent und Zubehör ist: sperrig, unbequem, umständlich. Und ich sehe keinen Grund dafür, warum man in einem Projekt auf dieses System zurückgreifen sollte, wenn man auch wesendlich schnellere, übersichtlichere, elegantere, direktere Lösungen wählen kann.
Ich habe mich vor längerer Zeit mal recht ausführlich mit dem ganzen Murks beschäftigt, um die MaxGUI in ein für mich erträgliches Format zu pressen. Ich habe auch schon diverse GUI-Module geschrieben und ich würde dafür niemals TEvent verwenden. An die verschiedenen Gadget-Actions werden einfach Funktionspointer rangehängt und fertig. Diese Lösung ist effizient, überschaubar und unkompliziert zu handhaben. Ein Eventsystem hingegen ist immer mit sehr viel mühsamer Schreibarbeit verbunden und läuft über unnötig viele Umwegen. Ich weis, dass es einige Leute hier im Forum gibt, die auf TEvent und ähnliche Konstruktionen stehen, doch bisher konnte mir irgendwie noch niemand einen wirklich nachvollziehbaren Vorteil nennen, der dem Aufwand gerecht wird. Aber wer weis ... vielleicht zaubert ja doch noch jemand ein unschlagbares Argument aus dem Hut. ![]() |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok danke schonmal.
@ FDM: Das mit dem Messaging System war mir schon so halb klar, da ich mal irgendwann mit der WinApi zu tun hatte und da auch Messages an Programme gesendet werden können z.B. und das war irgendwie vergleichbar...wie auch immer. Das Aufwand <-> Nutzen Verhältnis ist mir halt nicht ganz klar. @ undefinded: Das mit der GUI trifft es ziemlich genau. Da ich bisher kein einheitliches GUI Modul geschrieben habe, sondern mir nur immer die einzelnen Teile geschrieben habe die ich brauchte, wollte ich das jetzt mal tätigen. Bevor ich jedoch anfange und dann stellt sich später heraus, das wäre aber so und so viel einfacher und eleganter gegangen und ich bei der MaxGUI halt die Nutzung dieser Events gesehen hatte, dachte ich mir ich frage halt mal nach. Die Funktionen der einzelnen Teile hatte ich bisher auch über Funktionspointer gelöst, funktionierte soweit auch. Danke jedenfalls schonmal, lag ich ja bisher nicht ganz so "falsch" bei meiner Gestaltung^^ Vielleicht hat ja noch jemand ein (paar) Argument(e) für oder gegen die Nutzung von Events. Edit: Die GUI wird eine Ingame-GUI also nicht so wie MaxGUI, falls das irgendeinen Unterschied machen sollte bei der Beurteilung für oder gegen Events. |
||
Blessed is the mind too small for doubt |
![]() |
RoneBetreff: bla |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei einer kleinen InGame Gui will man in der Regel synchron auf seine Events reagieren, von daher sind 'echte' Events und eine Event Queue oftmals zu viel des guten...
Will man allerdings eine universell einsetzbare Gui, sollte man schon ein vernümptiges Eventsystem haben, um zB auch asynchrone Events vernümpftig handhaben zu können, beispielsweise wenn man mit externen Geräten arbeitet... http://en.wikipedia.org/wiki/Event_%28computing%29 Bisschen psoudocode, merk aber gerade das ich irgw. die EventQueue und TEvent verpeilt habe... ![]() Vieleicht auch alles mist, bin hundemüde ![]() was solls: Code: [AUSKLAPPEN] '#######################################################################
' App.bmx Type Dialog Field myButton:Button Field camControl:CamaraControl Method New() myButton = New Button() myButton.Clicked = New ButtonClickedEvent.Create(Self,"myButton_clicked") myButton.MouseMove = New MouseMoveEvent .Create(Self,"myButton_mouseMove") camControl = New CamaraControl() camControl.ImageAvailable = New ImageAvailableEvent.Create(Self,camControl_ImageAvailable ) EndMethod Method myButton_clicked(sender:Object, e:ButtonClickedEventArgs ) Notify "Hello" EndMethod Method myButton_mouseMove(sender:Object, e:MouseEventArgs ) Notify "Hello" EndMethod ' wird asynchron aufgerufen Method camControl_ImageAvailable(sender:Object, e:ImageAvailableEventArgs ) showBuffer(e.Buffer) EndMethod EndType Code: [AUSKLAPPEN] '####################################################################### ' Gui.bmx Type EventArgs EndType Type EventHadler Field _method:TMethod Method Create(context:Object, handler:String) _method = ... Assert CheckSignatur() EndMethod Method CheckSignatur:Int(m::TMethod) ' return checkSignaturWithReflection is ok EndMethod Method Invoke(sender:Object, args:EventArgs ) _method.Invoke(sender, args ) EndMethod EndType '###################################################################### ' CameraControl.bmx ' Asynchrones event Type ImageAvailableEventtArgs Extends EventArgs Field buffer:TPixmap Method Create:ImageAvailableEventventArgs (_buffer:TPixmap) buffer =_buffer EndMethod EndType Type ImageAvailableEventExtends EventHadler Field sender:Object Field args:ImageAvailableEventtArgs EndType Type CamaraControl Field ImageAvailable:ImageAvailableEvent Method GrabImageFromCamera() 'StartImageGrabThread() in grab-thread ausführen EndMethod Method StartImageGrabThread() ' Grab image ' Fire ImageAvailableEvent EndMethod EndType '####################################################################### ' Button.bmx ' Button nutzt synchrone events Type MouseEventArgs Extends EventArgs Field X:Int Field Y:Int Method Create:MouseEventArgs(_x:Int,_y:Int) EndMethod EndType Type ButtonClickedEvent Extends EventHadler Field sender:Object Field args:EventArgs EndType Type MouseMoveEvent Extends EventHadler Field sender:Object Field args:MouseEventArgs EndType Type Button Field Clicked:ButtonClickedEvent Field MouseMove:MouseMoveEvent Method InternalUpdate() ' if button was clicked If Clicked Then Clicked.Invoke(Self, New ButtonClickedEvent ) EndIf If MouseMove Then MouseMove.Invoke(Self, New EndIf EndMethod EndType |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group