GUI wie in Monkey Island 3

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Black Knight
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 237
Registriert: 04.03.2004, 13:04
Wohnort: Görlitz

GUI wie in Monkey Island 3

Beitrag von Black Knight »

Möchte gerne so ein GUI wie in Monkey Island 3 einbauen, also wenn ich auf die Maustaste drücke öffnet sich das GUI am Cursor Punkt und dann kann man halt aussuchen ob benutzen, reden, sehen usw. Kennt ja bestimmt jeder :wink: ! Ist das überhaupt möglich, da man ja mit Alpha-channel arbeiten müsste (um z.B. ein rundes GUI zu bekommen).


mfg

Black Knight
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

Runde GUIs sind auch ohne Alpha-Channel problemlos möglich. Setz die Hintergrundfarbe der GUI auf 0. Wenn du willst, kannst du dann eine Hintergrundgrafik verwenden, bei der es transparente Bereiche gibt. Dann platzierst du die einzelnen GUI-Elemente.

Den Code für das Anzeigen der GUI schreibst du in on_mouse_click. mouse.x und mouse.y liefern die Koordinaten.
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Beitrag von Rocco »

http://www.otropunto.com/jrp/ags/index.asp

schau dir mal diese seite an.
sind sehr gute beispiele für so ein gui.
Benutzeravatar
Black Knight
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 237
Registriert: 04.03.2004, 13:04
Wohnort: Görlitz

Beitrag von Black Knight »

Werd es mal ausprobieren und wenn es nicht klappt dann schreib ich nochmal, aber mit hilfe der Seite (Rocco) und den Beschreibungen (a-v-o), werd ich das schon hinbekommen (hoff ich mal 8-[ ).

Also Danke :mrgreen:
Sharalamude

Beitrag von Sharalamude »

Hier auf'm AT gibt's ein MonkeyIsland-3-Dingens für AGS mit dem goldenem GUI drinne.
Benutzeravatar
Campusanis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 108
Registriert: 06.01.2003, 13:22
Kontaktdaten:

Beitrag von Campusanis »

Ich muss schon wieder einen alten Thread ausbuddeln. ;)

Also, ich hab mir jetzt die MI3 GUI hier vom AT besorgt und ein paar kleine Verbesserungen hinzugefügt (z.B. dass man das Inventar wie im Original einfach mit einem Rechtsklick wieder schließen kann).
Allerdings möchte ich noch, dass sich die "Verbcoin" auch bei Inventargegenständen im Inventar öffnet.
Hat da irgendjemand eine AHnung, ich hab schon vieles vergeblich versucht...

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

Beitrag von KhrisMUC »

Bei den "General settings" muss "handle inventory clicks in script" aktiviert sein.
Jetzt kann man in der on_mouse_click mit Hilfe von eMouseLeftInv bzw. eMouseRightInv Klicks auf Inventory Items abfragen.

Das sollte Dir erstmal weiterhelfen.
Use gopher repellent on funny little man
Benutzeravatar
Campusanis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 108
Registriert: 06.01.2003, 13:22
Kontaktdaten:

Beitrag von Campusanis »

Danke für den Tipp, aber ich scheitere schon am generellen Aufruf von eMouseLeftInv. Ich habe jetzt diese Zeilen in meinem on_mouse_click:

Code: Alles auswählen

else if (button == eMouseLeftInv) {
			Mouse.UseModeGraphic(eModeLookat);
			}
Nur mal zum Test soll die Cursorgrafik verändert werden, wenn auf einen Inventargegenstand links geklickt wird. Es passiert aber nicht!? Mouse.IsButtonDown funktioniert ja blöderweise nur mit Left und Right... :/
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Nimm zum Testen besser ein schlichtes

Code: Alles auswählen

Display("Funzt.");
Laut Hilfedatei sollte nichts weiter nötig sein, und bei mir klappts auch problemlos. Poste mal Deine komplette on_mouse_click, vielleicht liegt der Fehler woanders.
Use gopher repellent on funny little man
Benutzeravatar
Campusanis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 108
Registriert: 06.01.2003, 13:22
Kontaktdaten:

Beitrag von Campusanis »

Okay, hier ist es:

Code: Alles auswählen

function on_mouse_click(int button) {
  // called when a mouse button is clicked. button is either LEFT or RIGHT
  if (IsGamePaused() == 1) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
    }
  else if (button == eMouseRight) {
    if (GetCursorMode() == 4) SetCursorMode(0); //checks wether you use an inv.
 else {if (zaehl2 >=1){InterfaceOn(3); SetCursorMode(2); SetMouseCursor(6); Wait(10); zaehl++;}  }  
// brings up a CMI-like inventory screen.

  }
  else if (button == eMouseLeft) {  // left-clicking code
    if (GetCursorMode() == 4) ProcessClick(mouse.x,mouse.y,4);
    else { //these codes check wether you use an inventory or not..

    clicked = 1; //we trigger the calculating

    mousex = mouse.x; //we set these params to store the exact location of
    mousey = mouse.y; //where you clicked...

    guix = mousex - 25; //and we set the whereabout's for the GUI... and to
    guiy = mousey - 25; //center the GUI, we'll remove 25 (see below)...

    if (guix < 0) guix = 0; if (guix > 269) guix = 269;
    if (guiy < 0) guiy = 0; if (guiy > 149) guiy = 149;
      //Now we'll check these so the verbcoin won't appear to close to
      //the edges. If not altered, it may be impossible to select certain
      //commands! Why these numbers? Well, the GUI is exactly 50x50, which...

      //(NOTATE: the GUI is 50x50, not the graphic. That's why the GUI never will be
      //displayed without some space to the screen edge!!!)

      //...means that to center it by our clicks, it must be set to the mouse
      //coordinates - 25... AND, since AGS first coord. is (0,0), you
      //subtract 1 from the values. Also, as all other things, it spawns from
      //the top-right corner, so in the top and left side, well simply put it
      //close as possible ie. 0. On the other side, well take the largest value
      //(which is 319) and subtract 50 (the size of the GUI) and the equalent
      //from the bottom (199-50)
      }
		}


		else if (button == eMouseLeftInv) {
			cEgo.Say("Es geht!!");
		}
		
}
Es ist noch alles genauso wie es in der Original GUI auch war, nur die kleine Bedingung mit dem "zaehl2" hab ich hinzugefügt (bewirkt dass das Inventar beim Rechtsklick nicht zehn mal pro Sekunde auf und zu geht). Die funktioniert aber auch tadellos, es ist nur der eMouseLeftInv...
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Ein Schuss ins Blaue:

Code: Alles auswählen

function on_mouse_click(MouseButton button) {
  ...
(MouseButton statt int, sollte aber eigentlich keinen Unterschied machen.)

Ansonsten hast Du entweder "Handle inventory clicks in script" nicht aktiviert, oder Du klickst einfach nicht auf ein Inv-Icon.

Wichtig: NUR beim Klick auf ein ITEM wird on_mouse_click(eMouseLeftInv) aufgerufen, NICHT beim Klick ins Inventarfenster!
Use gopher repellent on funny little man
Benutzeravatar
Campusanis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 108
Registriert: 06.01.2003, 13:22
Kontaktdaten:

Beitrag von Campusanis »

Okay, ich hab's jetzt endlich gefunden. Aus irgendeinem Grund gilt das Spiel als pausiert, wenn man auf einen Inventargegenstand klickt. Mein Workaround sieht so aus (aus on_mouse_click):

Code: Alles auswählen

if (IsGamePaused() == 1 && gInventory.Visible == false) {
    // Game is paused, so do nothing (ie. don't allow mouse click)
    }
Das mit dem gInventory hab ich hinzugefügt, so dass nur noch dann nichts passiert, wenn das Inventar auch zu ist. Dass man es jetzt wohl auch bedienen kann, wenn das Spiel pausiert ist, ist halt ein kleiner Nebeneffekt, den krieg ich zur Not bestimmt auch noch klein. ;)
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Da hätt ich auch drauf kommen können, bei Deinem GUI ist wahrscheinlich als Visible-Modus "Popup Modal" eingestellt, ändere das zu "Normal", dann wird das Spiel nicht pausiert, wenn das GUI angezeigt wird.
Use gopher repellent on funny little man
Benutzeravatar
Campusanis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 108
Registriert: 06.01.2003, 13:22
Kontaktdaten:

Beitrag von Campusanis »

Hm, neues Problem. -.-
Ist es machbar, dass vom Charakter gesprochener Text "immer oben" ist, also nicht hinter dem Inventar verschwindet, wenn es geöffnet ist? Ich will es eigentlich nicht jedes mal aus- und wieder anschalten, wenn es nicht sein muss.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Soweit ich weiß nur durch einen workaround, Du könntest z.B. das Inventar GUI größer machen, einen Teil des Inventarhintergrundbildes durchsichtig machen und dort ein Textlabel plazieren, dass den Text anzeigt.

Du müsstest die Textanzeige halt komplett selbst skripten.

Oder Du probierst es mit einem Textoverlay.
Use gopher repellent on funny little man
Antworten