leute ich bin ein noob. wie kann ich überprüfen ob ein button auf einem gui angeklickt wurde? in der funktion interface_clicked is das ja einfach (mit if (button==1){ //code}). ich habe aber eine eigene funktion in der ich prüfen muss ob auf gui x button y angeklickt wurde. den anfang habe ich mit if(gui.visible==true){} gemacht aber jetzt weiß ich nicht wie ich überprüfen kann welcher button y gedrückt wurde. kann mir da jemand helfen? (ags v2.7)
p.s.: habe im manual nichts gefunden
button-frage
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Du kannst theoretisch überprüfen, ob ein Button gedrückt wird, indem Du ständig (also in der repeatedly_execute) den Zustand der Mousebuttons und den Button unter der Maus überprüfst.
Das ist aber umständlich.
Mir ist nicht ganz klar, warum Du die interface_klick-function nicht benutzen willst, denn genau dafür ist sie da.
Du kannst aber im GUI-Editor jedem Button einen Scriptnamen geben und dann eine Funktion eintragen, die nach Klick aufgerufen wird.
Wo hast Du denn deine eigene Funktion reingeschrieben? Ins roomscript?
Und was soll sie bewirken?
Beschreib Dein Vorhaben mal bitte etwas genauer.
Das ist aber umständlich.
Mir ist nicht ganz klar, warum Du die interface_klick-function nicht benutzen willst, denn genau dafür ist sie da.
Du kannst aber im GUI-Editor jedem Button einen Scriptnamen geben und dann eine Funktion eintragen, die nach Klick aufgerufen wird.
Wo hast Du denn deine eigene Funktion reingeschrieben? Ins roomscript?
Und was soll sie bewirken?
Beschreib Dein Vorhaben mal bitte etwas genauer.
Use gopher repellent on funny little man
ich habe meine function an den anfang des global scripts geschrieben. der grund warum ich die button abfrage nicht ins interface_click dingsdabumsta schreiben will ist dass ich es einfach nicht so gerne benutze
ich mag das halt irgendwie nicht. frag nicht warum. aber okay wenn es so einfacher ist mache ich es damit. aber dann frage ich nochmal anders. kann ich denn auch in der interface_click funktion meine eigenen funktionen einbauen? also z.b.:
auf jedenfall danke für deine hilfe.
ich mag das halt irgendwie nicht. frag nicht warum. aber okay wenn es so einfacher ist mache ich es damit. aber dann frage ich nochmal anders. kann ich denn auch in der interface_click funktion meine eigenen funktionen einbauen? also z.b.:
Code: Alles auswählen
function interface_click(int interface, int button) {
function MeineFunktion(int blabla{ //code}
}
das habe ich auch gesehen aber weiß nicht wie es genau funktioniert. vielleicht kannst du mir das etwas genauer erklären.Du kannst aber im GUI-Editor jedem Button einen Scriptnamen geben und dann eine Funktion eintragen, die nach Klick aufgerufen wird.
auf jedenfall danke für deine hilfe.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Du kannst Funktionen nicht verschachteln.
Aber du könntest in die on_interface_click schreiben:
Dann kannst du die eigenen Funktionen verwenden.
Zu deiner 2. Frage:
Ich bin auch gerade am rumprobieren.
Der Scriptname ist der Name des Buttons, mit dem Du ihn im script ansprechen kannst. Wenn Du hier z.B. ldbutton einträgst, kannst Du im script z.B. schreiben und so den Button an andere Koordinaten setzen.
Wenn Du bei "Click" den Namen einer Funktion einträgst, dann wird diese aufgerufen, anstatt der on_interface_click().
Allerdings will AGS 2 Parameter übergeben, d.h. wenn Du jetzt bei Click z.B. "ldbutton_Click" drinstehen hast, musst Du im global script folgende Funktion definieren:Allerdings weiß ich nicht, was da übergeben wird, hab auch im manual nix gefunden. b war wohl ein int, es hatte den Wert 1, aber a war als int 118974987 oder so und als String "He0"
Strazer?
NACHTRAG: Hab's gefunden.
http://www.bigbluecup.com/yabb/index.php?topic=19369.0
Ich hab drei Buttons, Script names sind "load", "save" und "quit". Bei Left click ist "Run script" eingestellt, bei Click steht "menu_Click".
Die Funktion sieht bei mir jetzt so aus:
Man muss also nicht mal eine eigene Funktion für jeden Button verwenden, da der angeklickte Button beim Funktionsaufruf übergeben wird (function menu_Click(GUIControl *c, int mousebutton)).
Der zweite Parameter ist der Mousebutton, der sich bequem über die eNums abfragen lässt.
Noch etwas fiel mir auf: Einer der Buttons hat trotzdem nach wie vor die on_interface_click() aufgerufen, statt meiner menu_Click(). Dann hab ich aber im GUIEditor Left click auf "No action" und dann wieder auf "Run script" gestellt, und dann gings.
Aber du könntest in die on_interface_click schreiben:
Code: Alles auswählen
if (interface==x) {
if (button==y) myLoad();
if (button==z) mySave();
...
}
Zu deiner 2. Frage:
Ich bin auch gerade am rumprobieren.
Der Scriptname ist der Name des Buttons, mit dem Du ihn im script ansprechen kannst. Wenn Du hier z.B. ldbutton einträgst, kannst Du im script z.B.
Code: Alles auswählen
ldbutton.SetPosition(10, 10);
Wenn Du bei "Click" den Namen einer Funktion einträgst, dann wird diese aufgerufen, anstatt der on_interface_click().
Allerdings will AGS 2 Parameter übergeben, d.h. wenn Du jetzt bei Click z.B. "ldbutton_Click" drinstehen hast, musst Du im global script folgende Funktion definieren:
Code: Alles auswählen
function ldbutton_Click(? a, int b) {
// code
}
Strazer?
NACHTRAG: Hab's gefunden.
http://www.bigbluecup.com/yabb/index.php?topic=19369.0
Ich hab drei Buttons, Script names sind "load", "save" und "quit". Bei Left click ist "Run script" eingestellt, bei Click steht "menu_Click".
Die Funktion sieht bei mir jetzt so aus:
Code: Alles auswählen
function menu_Click(GUIControl *c, int mousebutton) {
string s, t;
if (mousebutton==eMouseLeft)
StrCopy(s, "Linksklick auf Button ");
else if (mousebutton==eMouseMiddle)
StrCopy(s, "Mausradklick auf Button ");
else if (mousebutton==eMouseRight)
StrCopy(s, "Rechtsklick auf Button ");
if (c==load)
StrCopy(t, "load.");
else if (c==save)
StrCopy(t, "save.");
else if (c==quit)
StrCopy(t, "quit.");
StrCat(s, t);
Display(s);
}
Der zweite Parameter ist der Mousebutton, der sich bequem über die eNums abfragen lässt.
Noch etwas fiel mir auf: Einer der Buttons hat trotzdem nach wie vor die on_interface_click() aufgerufen, statt meiner menu_Click(). Dann hab ich aber im GUIEditor Left click auf "No action" und dann wieder auf "Run script" gestellt, und dann gings.
Use gopher repellent on funny little man