Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Azrael
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 124
Registriert: 13.05.2003, 16:46
Kontaktdaten:

Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Beitrag von Azrael »

Hallo,

ich stehe wieder einmal vor einem Problem.

Mein Charakter soll durch einen Raum gehen, der 2 Lichter hat. Alle paar Sekunden wird das eine Licht dunkler, das andere heller. Das lässt sich über die Hintergründe problemlos festlegen. Der Charakter soll aber ebenfalls heller oder dunkler werden, sich also dem Licht anpassen.

Mein Ansatz war, dass ich im Raum unter "Repeatedly execute" folgendes Skript ausführe:

SetBackgroundFrame(0); // Licht 1 leuchtet hell, Licht 2 dunkel
SetAreaLightLevel(1,0); // Region 1 wird hell
SetAreaLightLevel(2,-50); // Region 2 wird dunkel
Wait(120); // warte 3 Sekunden
SetBackgroundFrame(1); // Licht 1 leuchtet dunkel, Licht 2 hell
SetAreaLightLevel(1,-50); // Region 1 wird dunkel
SetAreaLightLevel(2,0); // Region 2 wird hell
Wait(120); // warte 3 Sekunden


Der Lichtwechsel klappt damit super und auch der Charakter passt sich an. Leider lässt er sich nicht mehr bewegen oder die GUI anwählen. Ich hänge in einer Endlosschleife fest und kann das Spiel nur mehr gewaltsam abbrechen.

Gibt es einen Weg, die beschriebene Funktion umzusetzen und den Charakter trotzdem zu bewegen, die GUI zu bedienen, etc.?

Liebe Grüße,
Azrael
pikubik
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 76
Registriert: 09.04.2006, 17:51
Kontaktdaten:

Re: Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Beitrag von pikubik »

der "Wait"-Befehl ist der Grund warum das dann hängt

Benutze stattdessen SetTimer (int timer_id, int timeout)
und IsTimerExpired (int timer_id)

das sieht dann so aus:

if (IsTimerExpired(1) == true) {
if (licht==1) { // Licht 1 ist hell
SetBackgroundFrame(0); // Licht 1 leuchtet hell, Licht 2 dunkel
SetAreaLightLevel(1,0); // Region 1 wird hell
SetAreaLightLevel(2,-50); // Region 2 wird dunkel
licht = 2;
SetTimer(1,120);
}
else { // Licht 2 ist hell
SetBackgroundFrame(1); // Licht 1 leuchtet dunkel, Licht 2 hell
SetAreaLightLevel(1,-50); // Region 1 wird dunkel
SetAreaLightLevel(2,0); // Region 2 wird hell
licht = 1;
SetTimer(1,120);
}
}

dann müsstest du noch am anfang des room-scripts die variable licht definieren

int licht;

und ihr beim ersten raumstart den wert 1 zuweisen
licht = 1;

habs nicht getestet, aber so dürfte es gehen


PS:
wenn du SetTimer(1, (Random(120)+80)); machst (geht natürlich auch mit anderen werten) dann wechselt das licht immer zufällig nach 2-5 sekunden, also nicht immer genau nach 3 sekunden, was das ganze etwas willkürlicher wirken lässt.
Ist nur eine Möglichkeit ;)
Ich weiß ja nicht ob es immer absichtlich genau im 3-sekunden-takt wechselt.
Benutzeravatar
Azrael
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 124
Registriert: 13.05.2003, 16:46
Kontaktdaten:

Re: Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Beitrag von Azrael »

Hallo pikubik,

danke für den Tipp, hat gut funktioniert =D>
Nun wird der Spieler nicht mehr geblockt und die GUI lässt sich auch normal benutzen. Die Variable "licht" hab ich allerdings nicht gebraucht, hab stattdessen mehrere Timer benutzt:

if (IsTimerExpired(1) == 1) {
SetBackgroundFrame(0);
SetAreaLightLevel(1,0);
SetAreaLightLevel(2,-50);
SetTimer(2, 40);
}
if (IsTimerExpired(2) == 1) {
SetBackgroundFrame(1);
SetAreaLightLevel(1,-50);
SetAreaLightLevel(2,0);
SetTimer(1, 40);
}


Und das wars schon. Danke für den Hinweis mit der RANDOM-Funktion. Damit kann ich die Sache noch "zufälliger" gestalten.

Liebe Grüße,
Azrael
Benutzeravatar
Azrael
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 124
Registriert: 13.05.2003, 16:46
Kontaktdaten:

Re: Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Beitrag von Azrael »

Hallo,

habe jetzt noch eine Frage:
Ich habe bemerkt, dass sich SetAreaLightLevel offenbar nur auf Charakter, nicht auf Objekte auswirkt. Gibt es eine Möglichkeit, diese Funktion auch auf Objekte auszudehnen? Oder kann in diesem Fall das Objekt nur ersetzt werden (z.B. mit SetObjectGraphic, SetObjectView oder SetObjectFrame)?

Viele Grüße,
Azrael
pikubik
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 76
Registriert: 09.04.2006, 17:51
Kontaktdaten:

Re: Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Beitrag von pikubik »

Viel einfacher ^^:

Bei AGS 3.0 und höher gehst du einfach auf edit room und dann auf objects.
dann wählst du das objekt aus, das vom Licht beeinflusst sein soll und stellst "UseRoomAreaLighting" auf "true", dann wird das objekt genauso wie der chara vom licht beeinflusst ;)
Benutzeravatar
Azrael
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 124
Registriert: 13.05.2003, 16:46
Kontaktdaten:

Re: Helligkeitswechsel über SetAreaLightLevel, Charakter hängt

Beitrag von Azrael »

Hallo,

danke für den Hinweis. Das bringt mir allerdings nichts, weil ich AGS 2.54 verwende. Egal, dann steuere ich das über die Objekt-View. Trotzdem danke !

Gruß,
Azrael :D
Antworten