Dialog – Mappedia

Dialog

Aus Mappedia
Wechseln zu: Navigation, Suche


Variablentyp: dialog
extends handle
Funktionen mit dialog als Rückgabewert
Funktionen mit dialog als Parameter

Dialoge ermöglichen es einem, den Spieler vor eine selbst definierte Auswahl zu stellen. Dialoge können dazu Buttons enthalten, welche vom Spieler, welchem der Dialog angezeigt wird, angeklickt bzw. ausgewählt werden können. Über Ereignisse ist es dann möglich, die jeweilige Auswahl abzufangen und darauf zu reagieren. Das bietet dem Anwender eine recht elegante und einfache Möglichkeit, Spieler etwas wählen zu lassen; es kann aber auch für komplexere Dinge wie z. B. Inventarsysteme genutzt werden. Dialoge müssen nicht für alle Spieler gleichzeitig angezeigt werden.

Verwendung

Hier nun eine kleine Beispielfunktion zur Anzeige eines einfachen Dialogs in Jass:

function showDialog takes nothing returns nothing
	local player user = Player(0) //Spieler 1 (Rot) soll den Dialog sehen.
	local dialog shownDialog = DialogCreate() //Dialog wird erzeugt
	local button okButton = DialogAddButton(shownDialog, "|cffffcc00O|rK", 'O') //OK-Button wird erzeugt
	local button cancelButton = DialogAddButton(shownDialog, "|cffffcc00A|rbbrechen", 'A') //Abbrech-Button wird erzeugt
	call DialogSetMessage(shownDialog, "Wähle!") //Dialog erhält einen Titel
	call DialogDisplay(user, shownDialog, true) //Dialog wird angezeigt
	//Entfernung der Speicherlecks
	//Achtung: Dialog geht verloren, da er nicht über eine globale Variable verwendet und nachhaltig mit [[DialogDestroy]] zerstört wird.
	set user = null
	set shownDialog = null
	set okButton = null
	set cancelButton = null
endfunction

Dieses Beispiel sollte Spieler 1 einen einfachen Dialog ohne irgendwelche Effekte anzeigen. Es gilt zu beachten, dass die Dialog-Instanz bei diesem Beispiel verloren geht, da sie nicht mit DialogDestroy zerstört wird.

Erweitern wir das Beispiel nun um eine gewisse Funktionalität, indem wir das Drücken eines Buttons abfangen:

globals //globals-Freiheit durch das JassNewGenPack (auch per GUI definierbar)
	dialog shownDialog
	button okButton
	button cancelButton
	trigger okTrigger
	trigger cancelTrigger
endglobals

function okAction takes nothing returns nothing
	local player user = Player(0)
	call DisplayTimedTextToPlayer(user, 0.0, 0.0, 5.0, "Sie sind einverstanden.") //Nachricht senden
	set user = null
endfunction

function cancelAction takes nothing returns nothing
	local player user = Player(0)
	call DisplayTimedTextToPlayer(user, 0.0, 0.0, 5.0, "Sie sind nicht einverstanden.")
	set user = null
endfunction

//Erzeugt den Dialog und die Auslöser. Sollte zu Beginn des Spiels aufgerufen werden.
function initDialog takes nothing returns nothing
	local event triggerEvent
	local triggeraction triggerAction
	set shownDialog = DialogCreate()
	call DialogSetMessage(shownDialog, "Wähle!")
	set okButton = DialogAddButton(shownDialog, "|cffffcc00O|rK", 'O')
	set cancelButton = cancelButton = DialogAddButton(shownDialog, "|cffffcc00A|rbbrechen", 'A')
	//OK-Auslöser
	set okTrigger = CreateTrigger() //Auslöser erzeugen
	set triggerEvent = TriggerRegisterDialogButtonEvent(okTrigger, okButton) //Button-Klick-Ereignis (in GUI standardmäßig nicht verfügbar)
	set triggerAction = TriggerAddAction(okTrigger, function okAction) //Aktion hinzufügen
	set triggerEvent = null
	set triggerAction = null
	//Abbrech-[[Auslöser]]
	set cancelTrigger = CreateTrigger()
	set triggerEvent = TriggerRegisterDialogButtonEvent(cancelTrigger, cancelButton)
	set triggerAction = TriggerAddAction(cancelTrigger, function cancelAction)
	set triggerEvent = null
	set triggerAction = null
endfunction

//Zerstört den Dialog und die Auslöser.
function clearDialog takes nothing returns nothing
	call DialogClear(shownDialog) //Dialog wird geleert; notwendig?
	call DialogDestroy(shownDialog) //Dialog wird zerstört
	set shownDialog = null
	call DestroyTrigger(okTrigger)
	set okTrigger = null
	call DestroyTrigger(cancelTrigger)
	set cancelTrigger = null
endfunction

//Zeigt den Dialog an.
function showDialog takes nothing returns nothing
	local player user = Player(0)
	call DialogDisplay(user, shownDialog, true)
	set user = null
endfunction

Es ist ebenfalls möglich das Klicken über das für den Dialog allgemein verwendbare Ereignis TriggerRegisterDialogEvent, welches auch standardmäßig in GUI verwendet wird bzw. die BJ-Version davon, abzufangen und dann über Bedingungen bzw. if-Abfragen herauszufinden, welcher Button angeklickt wurde. Dafür gibt es die Ereignisreaktions-Funktion GetClickedButton.

Ein Vorteil bei der Verwendung von Dialogen ist, dass man die Buttons nicht jedes Mal erneut hinzufügen muss, sondern ein und denselben Dialog immer wieder erscheinen lassen kann.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Warcraft-Mapping
Werkzeuge

Notice: Memcache::get() [memcache.get]: Server 85.13.160.44 (tcp 11212) failed with: Connection refused (111) in /www/htdocs/global/live/codecraft/classes/cache/cache.class.php on line 56