GUI wie in Monkey Island 3
- Black Knight
- Hobby-Archäologe
- Beiträge: 237
- Registriert: 04.03.2004, 13:04
- Wohnort: Görlitz
GUI wie in Monkey Island 3
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 ! 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
mfg
Black Knight
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
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.
Den Code für das Anzeigen der GUI schreibst du in on_mouse_click. mouse.x und mouse.y liefern die Koordinaten.
- Rocco
- Adventure-Treff
- Beiträge: 1019
- Registriert: 25.11.2003, 16:20
- Wohnort: Ronville
- Kontaktdaten:
http://www.otropunto.com/jrp/ags/index.asp
schau dir mal diese seite an.
sind sehr gute beispiele für so ein gui.
schau dir mal diese seite an.
sind sehr gute beispiele für so ein gui.
- Black Knight
- Hobby-Archäologe
- Beiträge: 237
- Registriert: 04.03.2004, 13:04
- Wohnort: Görlitz
- Campusanis
- Hobby-Archäologe
- Beiträge: 108
- Registriert: 06.01.2003, 13:22
- Kontaktdaten:
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
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
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
- Campusanis
- Hobby-Archäologe
- Beiträge: 108
- Registriert: 06.01.2003, 13:22
- Kontaktdaten:
Danke für den Tipp, aber ich scheitere schon am generellen Aufruf von eMouseLeftInv. Ich habe jetzt diese Zeilen in meinem on_mouse_click:
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... :/
Code: Alles auswählen
else if (button == eMouseLeftInv) {
Mouse.UseModeGraphic(eModeLookat);
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Nimm zum Testen besser ein schlichtes
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.
Code: Alles auswählen
Display("Funzt.");
Use gopher repellent on funny little man
- Campusanis
- Hobby-Archäologe
- Beiträge: 108
- Registriert: 06.01.2003, 13:22
- Kontaktdaten:
Okay, hier ist es:
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...
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!!");
}
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Ein Schuss ins Blaue:
(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!
Code: Alles auswählen
function on_mouse_click(MouseButton button) {
...
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
- Campusanis
- Hobby-Archäologe
- Beiträge: 108
- Registriert: 06.01.2003, 13:22
- Kontaktdaten:
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):
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.
Code: Alles auswählen
if (IsGamePaused() == 1 && gInventory.Visible == false) {
// Game is paused, so do nothing (ie. don't allow mouse click)
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
- Campusanis
- Hobby-Archäologe
- Beiträge: 108
- Registriert: 06.01.2003, 13:22
- Kontaktdaten:
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
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.
Du müsstest die Textanzeige halt komplett selbst skripten.
Oder Du probierst es mit einem Textoverlay.
Use gopher repellent on funny little man