Frage zu "Quick animation"

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Papa Rabe
Frischling
Frischling
Beiträge: 2
Registriert: 28.11.2007, 02:50
Wohnort: Niederbayern
Kontaktdaten:

Frage zu "Quick animation"

Beitrag von Papa Rabe »

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
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

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:

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();
}
-Jetzt runterscrollen zu on_mouse_click. Bei einem Linksklick wird üblicherweise einfach ProcessClick ausgeführt.
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
Benutzeravatar
Papa Rabe
Frischling
Frischling
Beiträge: 2
Registriert: 28.11.2007, 02:50
Wohnort: Niederbayern
Kontaktdaten:

Beitrag von Papa Rabe »

Hab noch das alte AGS 2.72!
Vielen Dank für den Tipp. Werd es gleich die nächsten Tage ausprobieren. Merci! :)

Cya

Papa Rabe w^v^w
Antworten