Button unter der Maus-Erkennung

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Rexxar
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 68
Registriert: 02.08.2012, 11:27

Button unter der Maus-Erkennung

Beitrag von Rexxar »

Hallo zusammen,
anstelle einer Reihe von btnslot1_Click-Zeilen wollte ich gerne folgendes machen:

Code: Alles auswählen

GUIControl *theControl = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
Button *pressedbutton = theControl.AsButton;
if (pressedbutton == btnslot1) {
    Irgendwasmachen();
 }
Diesen Code habe ich unter on_mouse_click() eingesetzt.
Es passiert aber nichts, wenn ich auf btnslot1 klicke. Was kann ich tun, was mache ich falsch?
Und: Gibt es schon mit AGS 3.3.3 die Möglichkeit, einen Button-Klick zu simulieren, oder geht das nur mit der 3.4, die bald kommen wird?
Fragen über Fragen,
auf Antworten hoffend,
Mfg Rexxar

Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Button unter der Maus-Erkennung

Beitrag von KhrisMUC »

on_mouse_click wird bei GUI-clicks nicht ausgeführt (Ausnahme: click auf Inventar-Items, falls so festgelegt)
Deinen Code könntest Du theoretisch in on_event / eEventGUIMouseUp verwenden.

Ist aber nicht nötig, wenn man stattdessen eine Funktion wie diese hier schreibt:

Code: Alles auswählen

function slots_OnClick(GUIControl *control, Mousebutton button) {
  if (button != eMouseLeft) return; // nur auf Linksklick reagieren

  if (control == btnslot1) ...
}
Jetzt einfach den Namen der Funktion in die Zwischenablage kopieren: slots_OnClick
und bei jedem Button im Event-Panel neben OnClick ins Feld einfügen.
Damit wird bei jedem Button die Funktion aufgerufen, und welcher nun angeklickt wurde, kann man wie gezeigt am Parameter herausfinden.

Und zwecks Klick simulieren: Du kannst natürlich die Funktion jederzeit selbst aufrufen:

Code: Alles auswählen

  slots_OnClick(btnslot1, eMouseLeft);
Ob Du die spezielle Funktionalität einer "Userclick-Simulation" brauchst, hängt davon ab, was genau Du damit machen möchtest.
Use gopher repellent on funny little man

Rexxar
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 68
Registriert: 02.08.2012, 11:27

Re: Button unter der Maus-Erkennung

Beitrag von Rexxar »

Vielen Dank für deine schnelle und korrekte Antwort.
Du bist ein echter AGS-Gott :D
Diese Userclick Simulation brauche ich, da die 5 Schnellslots nicht nur mit der Maus, sondern auch mit den Tasten 1-5 angesteuert werden können.
Mfg Rexxar

Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Button unter der Maus-Erkennung

Beitrag von KhrisMUC »

Nur der Vollständigkeit halber:

Code: Alles auswählen

function QuickSlot(int slot) {
  if (slot == 1) {
    ...
  }
  ...
}

function slots_OnClick(GUIControl *control, Mousebutton button) {
  if (button != eMouseLeft) return; // nur auf Linksklick reagieren

  QuickSlot(control.ID + 1); // erster button: ID 0, zweiter button: ID 1, usw.
}

// in on_key_press(eKeyCode k)

  // quickslots
  if (k >= eKey1 && k <= eKey5) QuickSlot(k - eKey0);
Use gopher repellent on funny little man

Rexxar
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 68
Registriert: 02.08.2012, 11:27

Re: Button unter der Maus-Erkennung

Beitrag von Rexxar »

Danke für deine Antwort.
Ich habs jetzt mit der ersten von dir beschriebenen Methode gelöst, die erscheint mir etwas einfacher und logischer :D
Mfg Rexxar

Antworten