Eigene GUI richtig erstellen

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
markusmüller

Eigene GUI richtig erstellen

Beitrag von markusmüller »

Hi!

Ich wollt euch mal fragen, wie ich eine eigene "Hauptgui" erstellt.
Ich hab des jetzt so gemacht, dass ich die "Hauptgui" die am anfang Iconbar hiess bearbeitet hab. Nun hab ich leider aber folgendes Problem: Wie kann ich machen, dass die GUI nicht nur erscheint wenn ich an den oberen bildrand gehe, und wenn sie erscheint, dass das spiel nicht "unterbrochen" wird? hoffe ihr könnt mir helfen.

thx im vorraus,
markus
Benutzeravatar
Jones
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 51
Registriert: 13.10.2004, 10:28

Beitrag von Jones »

Du musst bei der GUI bei der Option Visible "normal" einstellen statt "popup modal".
Inwiefern wird das Spiel unterbrochen?
markusmüller

Beitrag von markusmüller »

Hat funktioniert! thx!
Das war so, dass ich wenn ich die Gui "erscheinen lassen" hab, dass dann mein Char nicht mehr weitergelaufen is. Als ich es dann irgendwie rausgeklickt hab, hats wieder einwandfrei funktioniert. Aber jetzt gehts ja.

Hab da jetzt noch ne Frage:

Wie kann ich die Buttons "nimm", "benutze", "gib" usw. verscripten? bei mir funktioiert das irgendwie nicht richtig.

Vielleicht kann ich nachher noch nen pic reinstellen wie die Gui aussieht.

markus
Benutzeravatar
Jones
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 51
Registriert: 13.10.2004, 10:28

Beitrag von Jones »

Bei mir habe ich mir als Vorlage die Monkey-Island Demo genommen. Das mit dem Verscripten ist gar nicht schwer; für jeden Befehl schreibst du Folgendes in das GUI-Script:

Code: Alles auswählen

 if (interface == 0) {         //Die Nummer deiner GUI
    if (button == 0) {   // Die Nummer deines Buttons
      SetCursorMode(10);    //Wie der Mauscursor dann aussehen soll
      SetGlobalInt(80,2);    //Setzen der Variable 80
      }
Wenn ein Objekt oder ein Hotspot mit einem Button reagieren soll, schreibst du bei dem Objekt/Hotspot an die Stelle "Any click on object/hotspot" -> Run Script, und darein kommt dann:

Code: Alles auswählen

if (GetGlobalInt(80)==2)  
	{
	was passieren soll
	}
else
	{
	}
Ich hoffe ich konnte dir helfen!
markusmüller

Beitrag von markusmüller »

Jo. Du hast mir sehr geholfen. Vielen dank. Allerdings habe ich noch folgende probleme:
1) Wenn ich zum Beispiel "nimm" angeklickt habe und etwas angeklickt habe was nicht funktioniert. Dann bleibt er bei nimm und geht nicht automatisch zurück in "gehe zu" wie bei Lucasfans Demo.

2) Erscheint bei mir des in der leiste mit dem "Gehe zu" usw. nicht. Ich stelle mir des dann etwa so vor wie die von Lucasfan.

thx im vorraus,
markus
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

function on_mouse_click(int button) {
[Dein Script]
SetCursorMode(0);
}

aber bei inventorygegenständen aufpassen.

Probier auch mal diese GUI
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
markusmüller

Beitrag von markusmüller »

Irgendwíe klappt des net so ganz wie ich mir des vorstell. Jetzt funktionieren die Buttons gar nicht mehr. Jetzt läuft der nur noch...
Ich hab jetzt unten mal mein Script in der aktuellen Form hingeschrieben. Ich hoff irgendeiner kann den Fehler finden, diesen im script editieren und mir dann sagen woran es lag. wäre euch wie immer über hilfe sehr dankbar.

@[Zensiert]: thx für deine vorschläge. nur leider hab ich und meine scriptkenntnisse des nicht so ganz hinbekommen. Da kommt halt immer ne fehlermeldung dass irgendwas doppelt im script ist.

Hier erstmal das script(Die zeile des fehlers hab ich schon wieder rauseditiert):
// main global script file

// DO NOT EDIT OR REMOVE THIS LINE
function game_start() {
// called when the game starts, before the first room is loaded
CentreGUI (QUITGUI);

}
// DO NOT EDIT OR REMOVE THIS LINE


// DO NOT EDIT OR REMOVE THIS LINE
function repeatedly_execute() {
// put anything you want to happen every game cycle here
}
// DO NOT EDIT OR REMOVE THIS LINE


function show_inventory_window () {
// This demonstrates both types of inventory window - the first part is how to
// show the built-in inventory window, the second part uses the custom one.
// Un-comment one section or the other below.

// ** DEFAULT INVENTORY WINDOW
InventoryScreen();
/*
// ** CUSTOM INVENTORY WINDOW
GUIOn (INVENTORY);
// switch to the Use cursor (to select items with)
SetCursorMode (MODE_USE);
// But, override the appearance to look like the arrow
SetMouseCursor (6);
*/
}

#sectionstart on_key_press // DO NOT EDIT OR REMOVE THIS LINE
function on_key_press(int keycode) {
// called when a key is pressed. keycode holds the key's ASCII code
if (IsGamePaused() == 1) keycode=0; // game paused, so don't react to keypresses
if (keycode==17) QuitGame(1); // Ctrl-Q
if (keycode==363) SaveGameDialog(); // F5
if (keycode==365) RestoreGameDialog(); // F7
if (keycode==367) RestartGame(); // F9
if (keycode==434) SaveScreenShot("scrnshot.bmp"); // F12
if (keycode==9) show_inventory_window(); // Tab, show inventory

if (keycode==19) Debug(0,0); // Ctrl-S, give all inventory
if (keycode==22) Debug(1,0); // Ctrl-V, version
if (keycode==1) Debug(2,0); // Ctrl-A, show walkable areas
if (keycode==24) Debug(3,0); // Ctrl-X, teleport to room
}
#sectionend on_key_press // DO NOT EDIT OR REMOVE THIS LINE


#sectionstart on_mouse_click // DO NOT EDIT OR REMOVE THIS LINE
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==LEFT) {
ProcessClick(mouse.x, mouse.y, GetCursorMode() );
}
else { // right-click, so cycle cursor
SetNextCursorMode();
}
}
#sectionend on_mouse_click // DO NOT EDIT OR REMOVE THIS LINE

#sectionstart interface_click // DO NOT EDIT OR REMOVE THIS LINE
function interface_click(int interface, int button) {
if (interface == ICONBAR) {
if (button == 4) { // show inventory
show_inventory_window();
}
else if (button == 5) { // use selected inventory
if (character[ GetPlayerCharacter() ].activeinv >= 0)
SetCursorMode(4);
}
else if (button == 6) // save game
SaveGameDialog();
else if (button == 7) // load game
RestoreGameDialog();
else if (button == 8) // quit
GUIOn (QUITGUI);
else if (button == 20) // about
Display("Adventure Game Studio v2 run-time engine[[Copyright (c) 1999-2003 Chris Jones");
} // end if interface ICONBAR

if (interface == INVENTORY) {
// They clicked a button on the Inventory GUI

if (button == 1) {
// They pressed SELECT, so switch to the Get cursor
SetCursorMode (MODE_USE);
// But, override the appearance to look like the arrow
SetMouseCursor (6);
}

if (button == 2) {
// They pressed LOOK, so switch to that mode
SetActiveInventory(-1);
SetCursorMode(MODE_LOOK);
}
if (button == 3) {
// They pressed the OK button, close the GUI
GUIOff (INVENTORY);
SetDefaultCursor();
}

if ((button == 4) && (game.top_inv_item < game.num_inv_items - game.num_inv_displayed)) {
// scroll down
game.top_inv_item = game.top_inv_item + game.items_per_line;
}
if ((button == 5) && (game.top_inv_item > 0)){
// scroll up
game.top_inv_item = game.top_inv_item - game.items_per_line;
}
}
if (interface == QUITGUI) {
if (button == 0) {
QuitGame(0);
}
if (button == 1) {

GUIOff(QUITGUI);
}
}
if (interface == 0) {
if (button == 0) { // Gib
SetCursorMode(2);
SetGlobalInt(1,0);
SetGlobalInt(80,2);
}
if (button == 3) { // Öffne
SetCursorMode(8);
SetGlobalInt(80,3);
}
if (button == 10) { // Schau
SetCursorMode(1);
SetGlobalInt(80,8);
}
if (button == 4) { // Benutze
SetCursorMode(2);
SetGlobalInt(1,1);
SetGlobalInt(80,7);
}
if (button == 1) { // schliesse
SetCursorMode(8);
SetGlobalInt(80,1);
}
if (button == 9) { // druecke
SetCursorMode(8);
SetGlobalInt(80,4);
}
if (button == 2) { // nimm
SetCursorMode(5);
SetGlobalInt(80,6);
}
if (button == 5) { // rede
SetCursorMode(3);
SetGlobalInt(80,9);
}
if (button == 11) { // ziehe
SetCursorMode(8);
SetGlobalInt(80,5);
}

if ((button == 13) & (game.top_inv_item < game.num_inv_items - 7))
game.top_inv_item = game.top_inv_item + 4;
if ((button == 12) & (game.top_inv_item > 0))
game.top_inv_item = game.top_inv_item - 4;
}
SetCursorMode(0);
}
#sectionend interface_click // DO NOT EDIT OR REMOVE THIS LINE
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

ich hätte mal einen kleinen Fehler (der aber zu blöden Auswirkungen führen kann) gefunden:

else if (button == 6) {// save game
SaveGameDialog();
}
else if (button == 7){ // load game
RestoreGameDialog();
}
else if (button == 8 ){ // quit
GUIOn (QUITGUI);
}
else if (button == 20) {// about
Display("Adventure Game Studio v2 run-time engine[[Copyright (c) 1999-2003 Chris Jones");
}

Vielleicht brauchst du die Klammern da auch gar nicht, weil du jeweils nur eine Zeile nach dem if hast (irgendsowas gabs da) aber es macht es auf jeden Fall übersichtlicher und kann auch nicht schaden.

Was macht GlobalInt 80 und was GlobalInt 1? Warum benutzt du nur an zwei Stelle GlobalInt 1? Die Sachen kann ich aus dem Script allein jetzt nicht sehen.

if (interface == 0) {
if (button == 0) { // Gib
SetCursorMode(2);
SetGlobalInt(1,0);
SetGlobalInt(80,2);
}
if (button == 3) { // Öffne
SetCursorMode(;
SetGlobalInt(80,3);
}
if (button == 10) { // Schau
SetCursorMode(1);
SetGlobalInt(80,;
}
if (button == 4) { // Benutze
SetCursorMode(2);
SetGlobalInt(1,1);
SetGlobalInt(80,7);
}
if (button == 1) { // schliesse
SetCursorMode(;
SetGlobalInt(80,1);
}
if (button == 9) { // druecke
SetCursorMode(;
SetGlobalInt(80,4);
}
if (button == 2) { // nimm
SetCursorMode(5);
SetGlobalInt(80,6);
}
if (button == 5) { // rede
SetCursorMode(3);
SetGlobalInt(80,9);
}
if (button == 11) { // ziehe
SetCursorMode(;
SetGlobalInt(80,5);
}
if ((button == 13) & (game.top_inv_item < game.num_inv_items -7)) {
game.top_inv_item = game.top_inv_item + 4;
}
if ((button == 12) & (game.top_inv_item > 0)) {
game.top_inv_item = game.top_inv_item - 4;
}
SetCursorMode(0); mit dieser Zeile setzt du nach jeder Aktion den Cursor direkt auf 0, noch bevor der Spieler mit dem anderen Cursor etwas machen kann. Er klickt also z.B. auf rede. Dann wecheslt der Cursor auf 3, GlobalInt 80 wird auf 9 gesetzt, dann ändert AGS den Cursor auf 0 und erst dann kann der Spieler wieder etwas machen. Ich nehm mal an, dass willst du nicht! Diese Zeile musst du also rausnehmen :!:
}
} // end if interface ICONBAR


Ich hoffe ich konnte helfen!
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
Jones
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 51
Registriert: 13.10.2004, 10:28

Beitrag von Jones »

markusmüller hat geschrieben: 2) Erscheint bei mir des in der leiste mit dem "Gehe zu" usw. nicht. Ich stelle mir des dann etwa so vor wie die von Lucasfan.
Noch was dazu: Damit das bei dir erscheint, musst du in der GUI ein Label erstellen, dort, wo der Text erscheinen soll. Dann schreibst du bei dem jeweiligen Button den Befehl hin

Code: Alles auswählen

SetLabel(Guinummer,ObjektnummerdesLabels,"text")
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Jones hat geschrieben:

Code: Alles auswählen

SetLabel(Guinummer,ObjektnummerdesLabels,"text")
:roll: SetLabelText
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
markusmüller

Beitrag von markusmüller »

So... jetzt hab ich das geschafft, dass des in der GUI angezeigt wird. Jetzt bleibt leider immer noch das Problem, dass wenn ich auf einen Button in der Gui klicke, dass dann zwar das richtige kommt, aber nachdem es nicht funktioniert hat, ich nicht mehr zu button 0 komme. Ich würd die bisherige umsetzung ja gerne uppen, aber ich hab halt keine Ahnung wo des am besten kostenlos geht. Vielleicht habt ihr tipps!

thx im vorraus,
markus
Antworten