Hallo!
Ich bastel derzeit an meinem erste AGS Projekt und hab schon die grundlegenden Sachen selber heraus gefunden. Jetzt wollte ich ein wenig in den Feinschliff kommen und Animationen wie's sprechen und benutzen einbauen. Weiß auch schon, wie das geht (Quick animation), aber es ist etwas umständlich für jede Aktion das einzustellen, deshalb meine Frage: Kann man einer Handlung grundsätzlich einen Bewegungsablauf zuweisen oder muß ich das für jedes Objekt, Hotspot, etc. einzeln machen?
Vielen Dank im voraus.
Papa Rabe w^v^w
Frage zu "Quick animation"
- Papa Rabe
- Frischling
- Beiträge: 2
- Registriert: 28.11.2007, 02:50
- Wohnort: Niederbayern
- Kontaktdaten:
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
AGS 2.72? Oder schon 3.0? (Immer dazu sagen, da viele noch nicht umgestiegen sind und der Editor bei 3.0 deutlich anders ist.)
Es gibt schon die Möglichkeit, sowas automatisch zu machen.
Angenommen, Du willst z.B., dass der Charakter beim Benutzen/Nehmen immer zu dem Gegenstand hinläuft und danach greift, und hast drei Animationen, je nachdem, ob er hoch, vor oder zum Boden greifen soll.
-Als Erstes musst Du ein paar Custom Properties hinzufügen. Wähle irgendeinen Hotspot oder irgendein Object aus, click auf den "Custom Properties"-Button/bei Properties auf (...) und dann auf "Edit schema".
Du brauchst: X- und Y-Koordinate (nur für Objekte), Richtung, in die er schaut, und Greifhöhe.
Bei letzterem z.B.: Name: "reach", Description: "Griffhöhe", Type: Number, Default value: 0.
(X/Y-Koordinate: "x"/"y", "X/Y-Koordinate", Number, 160/100
Richtung: "face", "Blickrichtung", Number, -1)
Dann schließ das Fenster wieder.
Du kannst jetzt jedem Object, jedem Hotspot und jedem Character Koordinaten, Richtung und Griffhöhe zuweisen, indem Du bei den Properties die Zahlen einträgst, z.B. bei Griffhöhe: 0=nix, 1=Boden, 2=vor, 3=hoch.
-Als nächstes schreiben wir an den Anfang des global scripts (GlobalScript.asc) eine Funktion:
-Jetzt runterscrollen zu on_mouse_click. Bei einem Linksklick wird üblicherweise einfach ProcessClick ausgeführt.
Direkt davor kommt Folgendes rein:
Es gibt schon die Möglichkeit, sowas automatisch zu machen.
Angenommen, Du willst z.B., dass der Charakter beim Benutzen/Nehmen immer zu dem Gegenstand hinläuft und danach greift, und hast drei Animationen, je nachdem, ob er hoch, vor oder zum Boden greifen soll.
-Als Erstes musst Du ein paar Custom Properties hinzufügen. Wähle irgendeinen Hotspot oder irgendein Object aus, click auf den "Custom Properties"-Button/bei Properties auf (...) und dann auf "Edit schema".
Du brauchst: X- und Y-Koordinate (nur für Objekte), Richtung, in die er schaut, und Greifhöhe.
Bei letzterem z.B.: Name: "reach", Description: "Griffhöhe", Type: Number, Default value: 0.
(X/Y-Koordinate: "x"/"y", "X/Y-Koordinate", Number, 160/100
Richtung: "face", "Blickrichtung", Number, -1)
Dann schließ das Fenster wieder.
Du kannst jetzt jedem Object, jedem Hotspot und jedem Character Koordinaten, Richtung und Griffhöhe zuweisen, indem Du bei den Properties die Zahlen einträgst, z.B. bei Griffhöhe: 0=nix, 1=Boden, 2=vor, 3=hoch.
-Als nächstes schreiben wir an den Anfang des global scripts (GlobalScript.asc) eine Funktion:
Code: Alles auswählen
function WalkFaceReach(int mx, int my) {
int lt=GetLocationType(mx, my);
int rt;
int fc=-1;
// hinlaufen
if (lt==eLocationHotspot) {
Hotspot*h=Hotspot.GetAtScreenXY(mx, my);
rt=h.GetProperty("reach");
fc=h.GetProperty("face");
player.Walk(h.WalkToX, h.WalkToY, eBlock); // bei Hotspots den WalkTo-Point benutzen
}
else if (lt==eLocationObject) {
Object*o=Object.GetAtScreenXY(mx, my);
rt=o.GetProperty("reach");
fc=o.GetProperty("face");
player.Walk(o.GetProperty("x"), o.GetProperty("y"), eBlock);
}
else if (lt==eLocationCharacter) {
Character*c=Character.GetAtScreenXY(mx, my);
fc=c.GetProperty("face");
player.Walk(c.GetProperty("x"), c.GetProperty("y"), eBlock);
}
// in die Richtung schauen
int x=player.x;
int y=player.y;
if (fc==0 || fc==3) y-=fc*2-3;
if (fc==1 || fc==2) x+=fc*4-6;
if (fc!=-1) player.FaceLocation(x, y, eBlock);
// greifen
if (rt==0 || lt==eLocationCharacter) return; // nicht greifen bei 0 oder Charakter
player.LockView(rt+5); // VIEWs Nr. 6, 7, 8 für Boden, vor, hoch
player.Animate(player.Loop, 3, eOnce);
Wait(4);
player.UnlockView();
}
Direkt davor kommt Folgendes rein:
Code: Alles auswählen
if (mouse.Mode==eModeInteract || mouse.Mode==eModeUseInv) {
WalkFaceReach(mouse.x, mouse.y);
Use gopher repellent on funny little man
- Papa Rabe
- Frischling
- Beiträge: 2
- Registriert: 28.11.2007, 02:50
- Wohnort: Niederbayern
- Kontaktdaten: