Probleme mit Textoverlay/

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
BigBlueCup
Frischling
Frischling
Beiträge: 5
Registriert: 08.12.2007, 10:45

Probleme mit Textoverlay/

Beitrag von BigBlueCup »

Hallo erstmall ihr allwissenden!

Euer Forum hatt mir schon oft geholfen, aber trotzdem komme ich
bei follgenden Sachen einfach nicht weiter:

1. Ich möchte ein Textoverlay erstellen (was auch kein Problem ist), aber ich möchte den Overlay ohne wait Befehl anzeigen lassen!
Mit while hab ichs auch schon ausprobiert, aber da hängt sichs auf!

Code: Alles auswählen

while (player.InventoryQuantity[2]) {
  Overlay* txt1Overlay = Overlay.CreateTextual(326,138,120,1,0,"%s", player.Name));
}



2. Ich weiß dass das hier irgentwo mal im Forum stand, aber ich habs einfach nicht mehr gefungen :oops: : Ich wollte eine art Bildschirmschoner machen (Wenn der Spieler keine Eingabe oder Mausbewegung macht, soll er in einen anderen Raum)


PS: Ich nutze AGS Version 2.72(652)

Wenn mir jemand Helfen könnte wäre das Super,
wenn mir jemand Helfen würde, perfekt!!!
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Viel weiterhelfen kann ich dir im Moment noch nicht. Ich kann dir nur sagen, warum das mit der while-Schleife nicht funktionnieren kann: sobald die while-Schleife aktiviert wird, kommt man nie wieder aus ihr raus, da es keine Chance gibt, dass sich player.InventoryQuantity[2] irgendwie innerhalb dieser Schleife verändert... Das heißt, dass das System in dieser Schleife hängenbleibt und im Millisekundentakt der Befehl ausgefürt wird. Natürlich findet das AGS nicht OK. :wink:

Zur Lösung deines 1. Problems: Wenn ich etwas finde, kriegst du sie in ein paar Minuten...
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Hm. Vielleicht könnte eine weitere Erklärung zu 1. nicht schaden. Wie ist das gedacht? Willst du, dass der Overlay auf dem Bilschirm stehen bleibt und dass der Charakter weiterhin herumlaufen kann, ohne dass der Text verschwindet, oder willst du ihn einfach kurz anzeigen und wieder verschwinden lassen, ohne dass es irgendwelche Animationen oder änliches blockiert. Oder willst du etwas ganz anderes?
BigBlueCup
Frischling
Frischling
Beiträge: 5
Registriert: 08.12.2007, 10:45

Beitrag von BigBlueCup »

Erstmal Danke für die schnelle Antwort!

Zu 1 :

Ich wollte den Spielernamen im Hauptmenü einblenden lassen (dauerhaft) und den Spielernamen kann der Spieler selber aussuchen!

Zu 2 :

Das Stand im Zusammenhang mit einer Langeweileanimation oder einem Sound , welches die Spielfigur startete , wenn der Spieler nichts Tat (Maus+Tasten)

LG BigBlueCup


EDIT: Zu 1 nochwas: Ja im HAuptmenü ist eine Animation
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Aargh.... Ich bin ein Versager! Ich kriege es einfach nicht hin. :(
Ich würde den Namen allerdings sowieso mit einem GUI einblenden, nicht mit einem Overlay... :?
Zur Nummer 2 fällt mir nur der Idle-View ein, der ausgeführt wird, wenn die Figur eine gewisse Zeit lang nicht bewegt wurde.

Boah. Ich bin gerade an einem Tiefpunkt meines Wissens angelangt. :x
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Zu 1:
Ist das Hauptmenü ein eigener Raum?
Erstell den Overlay doch in player enters screen (before fadein); er bleibt sichtbar, bis Du in löschst oder den Raum verlässt, auch ohne Wait oder while.

Zu 2:
An den Anfang des global script kommt Folgendes:

Code: Alles auswählen

int idletime=20;  // sekunden, bis der bildschirmschoner losgeht
int ssr=4;         // Bildschirmschoner-Raum

function screensaver(bool acted) {
  int pr=player.Room;
  int rtg;
  if (acted) {
    if (pr == ssr) rtg=player.PreviousRoom;
    SetTimer(1, idletime*GetGameSpeed());
  }
  else {
    if (IsTimerExpired(1)) rtg=ssr;
  }
  if (rtg > 0 && rtg != pr) {
    SetNextScreenTransition(eTransitionInstant);
    if (rtg == ssr) {
      player.Transparency=100;
      mouse.Visible=false;
    }
    else {
      player.Transparency=0;
      mouse.Visible=true;
    }
    player.ChangeRoom(rtg);
  }
}
In game_start, on_mouse_click & on_key_press kommt jeweils als erste Zeile das rein:

Code: Alles auswählen

  screensaver(true);
Zum Schluss noch bei repeatedly_execute:

Code: Alles auswählen

int oldx, oldy;

function repeatedly_execute() {

  if (mouse.x != oldx || mouse.y != oldy) {
    oldx = mouse.x;
    oldy = mouse.y;
    screensaver(true);
  }
  
  screensaver(false);
  ...
Use gopher repellent on funny little man
BigBlueCup
Frischling
Frischling
Beiträge: 5
Registriert: 08.12.2007, 10:45

Beitrag von BigBlueCup »

Auf die Ide mit der GUI bin ich nicht gekommen(](*,) schande über mich) Danke müsste so auch funktionieren !

Probier ich sofort aus!

EDIT:
Danke KhrisMUC ! Hatte Deine Antwort übersehen. Naja jetzt sehe ich sie ja... Probiere ich jetzt aus
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Hm. Ich habe versucht, den Overlay in player enters room (before fadein) zu schreiben, aber es klappt nicht. Kein Overlay ist zu sehen.
Benutzeravatar
Kaktus
Tastatursteuerer
Tastatursteuerer
Beiträge: 658
Registriert: 17.02.2006, 01:45
Wohnort: Wüstä
Kontaktdaten:

Beitrag von Kaktus »

Timer, versuch mal folgendes:
Oben ins room script screibst du die Deklaration des Overlays, z.B.:
Overlay* txt1Overlay;

und in player enters room (before fadein) dann den Rest:
txt1Overlay = Overlay.CreateTextual(126,138,120,10,10,"%s",player.Name);

(Achte auch darauf, dass das Overlay nicht über den Bildschirmrand hhinausgeht, sonst wird es automatisch entfernt)
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Oh... Ich glaube, heute ist nicht mein Tag. Ich habe die verschiedensten Variablen am Anfang des Scriptes definiert, nur nicht den Overlay. :roll:
Ich glaube, ich mache mich demnächst auf den Weg ins Bett.
Benutzeravatar
Kaktus
Tastatursteuerer
Tastatursteuerer
Beiträge: 658
Registriert: 17.02.2006, 01:45
Wohnort: Wüstä
Kontaktdaten:

Beitrag von Kaktus »

Wieso, bist du krank?
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Nö, aber im Normalzustand hätte ich bestimmt daran gedacht, den Overlay vor dem Script zu definieren... :wink:
Benutzeravatar
Kaktus
Tastatursteuerer
Tastatursteuerer
Beiträge: 658
Registriert: 17.02.2006, 01:45
Wohnort: Wüstä
Kontaktdaten:

Beitrag von Kaktus »

Stimmt, zumal es ja auch in der Hilfe steht. :wink:
Na dann, schlaf mal schön deinen Rausch aus!
BigBlueCup
Frischling
Frischling
Beiträge: 5
Registriert: 08.12.2007, 10:45

Beitrag von BigBlueCup »

Das mit dem Overlay Funktioniert einwandfrei!! :) Danke!
Das mit dem Screensaver noch nicht, hab mich aber auch noch nicht so drum gekümmert.

Da fällt mir aber auch noch eine 3. Frage ein:


EDIT: Der Screensaver funktioniert jetzt auch ! DAnke nochmal !
Aber Weiß keiner Rat auf meine 3. Frage
(Kann man es irgentwie einstellen, wieviele Zeichen maximal, und wieviele minimal, in eine Inputbox eingetippt werden dürfen ?)

Um Antwort wirt gebettelt!!!
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Nein, kann man nicht.
Du brauchst ein GUI mit einem Eingabefeld. Wenn der Spieler was eingegeben hat und dann Enter drückt, wird name_des_feldes_Activate() aufgerufen.

Code: Alles auswählen

function password_Activate(...) {
  int l = password.Text.Length;
  if (l<6 || l>10) Display("Das Passwort muss zwischen 6 und 10 Zeichen lang sein!");
  else {
    my_password = password.Text;
    gPassword_gui.Visible=false;
  }
}
So in der Art.
Use gopher repellent on funny little man
Antworten