Noch ein MI-Fan-Adventure
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
cGuybrush.SayBackground("hi");
Allerdings fällt dann die Animation aus. Dafür gibt's aber ein Modul
Allerdings fällt dann die Animation aus. Dafür gibt's aber ein Modul
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
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
jo, die gibt's
Code: Alles auswählen
Overlay* speech = cGuybrush.SayBackground("Hello World");
while(speech.Valid) Wait(1); // wenn die Sprache noch auf dem Bildschirm ist, gibt die Valid-Eigenschaft true zurück
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
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Moin^^
Also ich hab gestern lange gegrübelt und bin bis jetzt noch zu keiner Lösung gekommen. Ich darf ja kein Wait() verwenden, damit das Script nicht unterbrochen wird, leider ging da kein while() mehr :/ Er muss solange wie die Nachricht auf dem Bildschirm ist die Animation machen, sie aber unterbrechen, wenn der Char läuft und danach wieder beginnen, falls die Nachrricht noch da ist ...
Also ich hab gestern lange gegrübelt und bin bis jetzt noch zu keiner Lösung gekommen. Ich darf ja kein Wait() verwenden, damit das Script nicht unterbrochen wird, leider ging da kein while() mehr :/ Er muss solange wie die Nachricht auf dem Bildschirm ist die Animation machen, sie aber unterbrechen, wenn der Char läuft und danach wieder beginnen, falls die Nachrricht noch da ist ...
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Mach doch mit cGuybrush.SetIdleView(x, 0), dann wird die Animation immer ausgeführt, wenn die Figur nicht geht.
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
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
OK, damit gehts:
Mit einer Ausnahme: Das Wait() muss weg, damit das Script nicht angehalten wird, aber dann läuft sich das while() tot :/
Nachtrag: Hab's endlich hinbekommen
Code: Alles auswählen
function SayIt (String msg){
int oldidle = cEgo.IdleView;
Overlay* speaking = cEgo.SayBackground (msg);
cEgo.SetIdleView(cEgo.SpeechView, 0);
while(speaking.Valid){
Wait(1);
}
cEgo.SetIdleView(oldidle, 0);
}
Nachtrag: Hab's endlich hinbekommen
Code: Alles auswählen
Overlay* egosayitwob; // Overlay für SayIt()
function game_start() {
[...]
egosayitwob = Overlay.CreateTextual(0,0,1,0,0,"");
SetGlobalInt(0,cEgo.IdleView);
game.bgspeech_stay_on_display = 1;
}
function repeatedly_execute() {
[...]
if (!egosayitwob.Valid){
cEgo.SetIdleView(GetGlobalInt(0), 0);
}
[...]
}
function SayIt (String msg){
egosayitwob = cEgo.SayBackground (msg);
cEgo.SetIdleView(cEgo.SpeechView, 0);
}
So, der Thread wird älter, also muss was neues rein ^^
Ich habe gestern und heute die Geschichte niedergeschrieben, sie steht in der derzeitigen Fassung auf 4 A4-Seiten und ich habe gemerkt, dass ich an die 40 Hintergründe zeichnen muss, nicht zu vergessen die ganzen Objekte und NPC's, welche auch noch animiert werde wollen Naja wird schon...
Ich habe gestern und heute die Geschichte niedergeschrieben, sie steht in der derzeitigen Fassung auf 4 A4-Seiten und ich habe gemerkt, dass ich an die 40 Hintergründe zeichnen muss, nicht zu vergessen die ganzen Objekte und NPC's, welche auch noch animiert werde wollen Naja wird schon...
Ähm ... ich hab da ein Problem:
Ich hatte eine Property "door" eingesetzt, aus der ich auslesen wollte, ob eine Tür geöffnet oder geschlossen ist. (0=zu, 1=offen etc.) Das nutzte ich derzeit auch für die Standardaktionen (also Öffnen wenn 0 etc.). Nur dummer Weise durfte ich gerade feststellen, dass ich diese Propertys wärend der Laufzeit nicht ändern kann :/ Gibt es eine andere Möglichkeit einem Objekt einen Wert zuzuweisen? (ohne GlobalInt, ich möchte nicht für jede Tür im Spiel einen Eintrag im GLobalscript machen müssen -.-)
Danke ...
Ich hatte eine Property "door" eingesetzt, aus der ich auslesen wollte, ob eine Tür geöffnet oder geschlossen ist. (0=zu, 1=offen etc.) Das nutzte ich derzeit auch für die Standardaktionen (also Öffnen wenn 0 etc.). Nur dummer Weise durfte ich gerade feststellen, dass ich diese Propertys wärend der Laufzeit nicht ändern kann :/ Gibt es eine andere Möglichkeit einem Objekt einen Wert zuzuweisen? (ohne GlobalInt, ich möchte nicht für jede Tür im Spiel einen Eintrag im GLobalscript machen müssen -.-)
Danke ...
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Du kannst entweder Variablen im jeweiligen room script anlegen, oder Du definierst einen Array.
AGS unterstützt keine mehrdimensionalen Arrays, aber das kann man einfach selbst lösen:
Der Index ist Raum*10+Tür, also tuer[11] enthält den Status der ersten Tür im ersten Raum, tuer[52] den der zweiten Tür im fünften Raum, usw. (Der Faktor 10 dient nur der Anschaulichkeit, 3 reicht natürlich auch, wenn kein Raum vier oder mehr Türen hat.)
Es gibt noch elegantere Möglichkeiten, wenn die Tür ein Objekt ist, dass je nachdem, ob sie offen oder zu ist, Sprite X oder Sprite Y benutzt, kannst Du die Spritenummer über Object.Graphic abfragen. Geschlossene Türen könnten dann z.B. gerade Nummern haben, offene Türen ungerade Nummern.
Das funktioniert, ich habe vor kurzem im AGS-Forum aufgeschnappt, dass man im global script über hotspot[x], object[x], usw. die Instanzen des aktuellen Raumes ansprechen kann.
AGS unterstützt keine mehrdimensionalen Arrays, aber das kann man einfach selbst lösen:
Der Index ist Raum*10+Tür, also tuer[11] enthält den Status der ersten Tür im ersten Raum, tuer[52] den der zweiten Tür im fünften Raum, usw. (Der Faktor 10 dient nur der Anschaulichkeit, 3 reicht natürlich auch, wenn kein Raum vier oder mehr Türen hat.)
Es gibt noch elegantere Möglichkeiten, wenn die Tür ein Objekt ist, dass je nachdem, ob sie offen oder zu ist, Sprite X oder Sprite Y benutzt, kannst Du die Spritenummer über Object.Graphic abfragen. Geschlossene Türen könnten dann z.B. gerade Nummern haben, offene Türen ungerade Nummern.
Code: Alles auswählen
function is_door_open(int door) {
int d=object[door].Graphic;
if ((d/2)*2==d) return 0;
else return 1;
}
Use gopher repellent on funny little man
- LAF
- Oldschool RPG King
- Beiträge: 6361
- Registriert: 30.03.2005, 20:13
- Wohnort: Tulln(Ö)
Das Schiff schaut schon mal nicht schlecht her, der Hintergrund ist etwas trostlos, fast ein wenig zu dunkel
Just the old one's
Oldschool RPG's: auf http://www.rpg-atelier.net/
Oldschool RPG's: auf http://www.rpg-atelier.net/