GUI Inaktivität simulieren

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Nicki

GUI Inaktivität simulieren

Beitrag von Nicki »

Hi,

ich arbeite zur Zeit mit Proskritos MI2 Template und wollte eine "GUI Inaktivität" hinzufügen. Zwar wird der Cursor bereits transparent und und das Interface ausgeschaltet, allerdings ist es möglich mit dem transparenten Cursor über Objekte im MAINGUI zu fahren, die dann ihr Mouseover Bild zeigen (Im Original ja nicht).

Das Problem habe ich gelöst indem ich eine elfte GUI namens "DECKE" hinzugefügt habe, die einfach die ganzen dunklen Verben aus der MAINGUI darstellt und bei Bedarf per Popup über diese positioniert wird. Beim Darüberfahren gibt es also keine Mouseover Bilder mehr.

Mit dem OPTIONS Menü (F5) funktioniert alles perfekt, GUI DECKE geht immer brav an und aus, wie es soll.

Allerdings klappt es nicht bei PAUSED(Leertaste) und RESTART(F8), zwar wird die MAINGUI richtig überdeckt, wenn man jedoch weiterspielen will, ist DECKE immer noch da, das Interface ist aus und auf Tastendruck wird nicht mehr reagiert. Bei Pause und Neustart dasselbe.

Naja, hier mal ein Auschnitt aus dem Code, nur mit dem RESTART Beispiel und was ich denke:

/**/function on_key_press(int keycode) {///////////On Key Press///////On Key Press
/**/ // called when a key is pressed. keycode holds the key's ASCII code
if (keycode==32){// SPACEBAR
if (IsGamePaused() == 0){
GUIOn(PAUSED);
DisableInterface();
}
else{
GUIOff(PAUSED);
EnableInterface(); //macht er aber nicht
}
}
if (IsGUIOn(CONFIRMEXIT) == 1){ // if exit gui is on
if (keycode == 78) GUIOff(CONFIRMEXIT); //if N is pressed continue
if (keycode == 74) QuitGame(0);//if J is pressed quit game
}
if (IsGUIOn(RESTART)==1){ // if exit gui is on
if (keycode == 78) GUIOff(RESTART); GUIOff(DECKE);//if N is pressed continue (funktioniert NICHT! DECKE geht nicht weg)
if (keycode == 74) RestartGame();//if J is pressed quit game
}
if (IsGamePaused() == 1) keycode=0;// game paused, so don't react to keypresses (ungewollt aktiv)
if (keycode==363) GUIOn(OPTIONS); GUIOn(DECKE);// F5 - OPTIONS (funktioniert!)
if (keycode==366) GUIOn(RESTART); GUIOn(DECKE); // F8 - RESTART funktioniert(kommt aber selbst wenn ich GUIOn(Decke); lösche!?)

Das alles scheint mit script-only GUIs zu tun zu haben, die alles auf Pause schalten. Das ist ja auch in Ordung, aber ich schalte doch auch immer alle wieder aus, warum bleibt alles auf Pause?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Re: GUI Inaktivität simulieren

Beitrag von a-v-o »

Nicki hat geschrieben:allerdings ist es möglich mit dem transparenten Cursor über Objekte im MAINGUI zu fahren, die dann ihr Mouseover Bild zeigen (Im Original ja nicht).
Ich hoffe, das CJ das Problem in der nächsten Version beseitigt.


Auf die Schnelle fällt mir auf, dass {} fehlen:
if (keycode==363) { GUIOn(OPTIONS); GUIOn(DECKE); }// F5 - OPTIONS
if (keycode==366) { GUIOn(RESTART); GUIOn(DECKE); }// F8 - RESTART
Nicki

Danke

Beitrag von Nicki »

Funktioniert jetzt tatsächlich! Die {} gaben gefehlt. :-)
Ich hoffe, das CJ das Problem in der nächsten Version beseitigt.
Ja,klar. So ist es schon sehr umständlich.

Also wer will kann sich das gerne einbauen, einfach eine elfte GUI DECKE erstellen. X und Y Position wie die MAINGUI, selbe Höhe, Breite je nachdem wie viel ihr überdecken wollt und als Hintergrundbild eben die normale MAINGUI ohne Mouseovers. Ich habe die Pfeile mal ausgespart, da ich die extra abfragen müsste welche gerade angezeigt werden.

ab Zeile 754:

if (keycode==32){// SPACEBAR
if (IsGamePaused() == 0){
GUIOn(PAUSED); GUIOn(DECKE);
DisableInterface();
}
else{
GUIOff(PAUSED); GUIOff(DECKE);
EnableInterface();
}
}
if (IsGUIOn(CONFIRMEXIT) == 1){ // if exit gui is on
if (keycode == 78) GUIOff(CONFIRMEXIT); //if N is pressed continue
if (keycode == 74) QuitGame(0);//if J is pressed quit game
}
if (IsGUIOn(RESTART)==1){ // if exit gui is on
if (keycode == 78) GUIOff(RESTART); GUIOff(DECKE);//if N is pressed continue
if (keycode == 74) RestartGame();//if J is pressed quit game
}
if (IsGamePaused() == 1) keycode=0;// game paused, so don't react to keypresses
if (keycode==363) {GUIOn(OPTIONS); GUIOn(DECKE);}// F5 - OPTIONS
if (keycode==366) {GUIOn(RESTART); GUIOn(DECKE);}// F8 - RESTART

und ab Zeile 829:

/**/ if (button == 2){ // continue playing
/**/ GUIOff(OPTIONS); GUIOff(DECKE);
/**/ }
/**/ if (button == 3){ // exit??
/**/ GUIOn(CONFIRMEXIT);
/**/ }
/**/ }
/**/ if (interface == RESTORE) {
/**/ if (button ==2) GUIOff(RESTORE); GUIOff(DECKE);
/**/ if (button ==1){
/**/ int index = ListBoxGetSelected(RESTORE,1);
/**/ if (GetSaveSlotDescription(index+100,buffer)==1){
/**/ GUIOff(RESTORE);
/**/ RestoreGameSlot(index+100);
/**/ }
/**/ }
/**/ if (button == 3){
/**/ if (GStopsaveitem<5) GStopsaveitem=0;
/**/ else GStopsaveitem-=5;
/**/ ListBoxSetTopItem(RESTORE,1,GStopsaveitem);
/**/ }
/**/ if (button == 4 && GStopsaveitem<90)
/**/ GStopsaveitem+=5;
/**/ ListBoxSetTopItem(RESTORE,1,GStopsaveitem);
/**/ }
/**/ if (interface == SAVE){
/**/ int index=ListBoxGetSelected(SAVE,1);
/**/ if (button == 3){
/**/ GUIOff(SAVE);
/**/ GUIOff(SAVETEXTBOX); GUIOff(DECKE);
/**/ }
/**/ if (button == 1){
/**/ int stbypos;
/**/ StrFormat(buffer,"%d.",index+1);
/**/ SetLabelText(SAVETEXTBOX,1,buffer);
/**/ if (GetSaveSlotDescription(index+100,buffer)==1) GetSaveSlotDescription(index+100,buffer);
/**/ else StrCopy(buffer,"");
/**/ SetTextBoxText(SAVETEXTBOX,0,buffer);
/**/ stbypos=28+((index-GStopsaveitem)*(defaultfontheight+2)); //28 is set by trial-error. Deppends of the savegames listbox position
/**/ SetGUIPosition(SAVETEXTBOX,29,stbypos);// 29 is set by trial-error. Same as above.
/**/ GUIOn(SAVETEXTBOX);
/**/ }
/**/ if (button == 2 && index>=0) {
/**/ GetTextBoxText(SAVETEXTBOX,0,buffer);
/**/ GUIOff(SAVE);
/**/ GUIOff(SAVETEXTBOX); GUIOff(DECKE);
/**/ SaveGameSlot(index+100,buffer);
/**/ }
/**/ if (button == 4){
/**/ GUIOff(SAVETEXTBOX);
/**/ ListBoxSetSelected(SAVE,1,-1);
/**/ if (GStopsaveitem<5) GStopsaveitem=0;
/**/ else GStopsaveitem-=5;
/**/ ListBoxSetTopItem(SAVE,1,GStopsaveitem);
/**/ }
/**/ if (button == 5 && GStopsaveitem<90){
/**/ GUIOff(SAVETEXTBOX);
/**/ ListBoxSetSelected(SAVE,1,-1);
/**/ GStopsaveitem+=5;
/**/ ListBoxSetTopItem(SAVE,1,GStopsaveitem);
/**/ }
/**/ }
/**/ if (interface == SAVETEXTBOX){
/**/ int index=ListBoxGetSelected(SAVE,1);
/**/ if (button == 0){
/**/ GetTextBoxText(SAVETEXTBOX,0,buffer);
/**/ GUIOff(SAVE);
/**/ GUIOff(SAVETEXTBOX); GUIOff(DECKE);
/**/ SaveGameSlot(index+100,buffer);
/**/ }
/**/ if (IsButtonDown(RIGHT)) GUIOff(SAVETEXTBOX);
/**/ }

bis zum nächsten Mal dann.
Antworten