Gute Idee für eine "Hotspot-Anzeige"?

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Kruttan
Adventure-Gott
Adventure-Gott
Beiträge: 4009
Registriert: 29.12.2001, 15:46
Wohnort: Hameln/Göttingen
Kontaktdaten:

Gute Idee für eine "Hotspot-Anzeige"?

Beitrag von Kruttan »

Hi,

überlege mir gerade ein Prozedur, mit AGS eine Hotspot-Anzeige zu bauen (Version: 2.72). Auf Tastendruck soll der Spieler alle Hotspots (bzw. später auch Objekte) im Raum angezeigt bekommen, die Enabled bzw. sichtbar sind.

Hab ein wenig mit Overlays rumgespielt, allerdings können nur 10 Overlays simulatan angezeigt werden. Das nächste Problem besteht darin, dass die Prozedur nicht an einen Raum gebunden sein soll (daher kann ich nicht die einzelnen Scriptnames der Hotspots checken und gucken, ob sie aktiviert sind).

Daher wollte ich zunächst (Es sei denn, es gibt einen bequemeren Weg), einfach mit den Walk-To-Points arbeiten. Je nachdem, ob Walk-To-Points dem Hotspot zugewiesen sind, soll also ein Hotspot angezeigt werden.
Wegen den maximal 10 Overlays wollte ich einfach mogeln. Die Idee ist, dass ich ein Overlay (AGS-Tasse) auf dem ersten Walk-To-Point zeichne, dann einen Screenshot mache, den Screenshot über die Szenerie lege, das Overlay auf dem nächsten Walk-To-Point mache und dann immer so weiter...

Leider kommt aber bei mit nur völliges Chaos... findet irgendwer die Fehler?

Code: Alles auswählen

  if( IsKeyPressed(65 + 7) || IsKeyPressed(9)) {
    if(GetGlobalInt(202) == 0) {
      SetGlobalInt(202, 1);
      DynamicSprite* backgr_hotspots = DynamicSprite.CreateFromScreenShot();
      while(GetGlobalInt(202) < 30) {
        if( (GetHotspotPointX(GetGlobalInt(202)) != - 1) && (GetHotspotPointY(GetGlobalInt(202)) != - 1) ) {
          Overlay* show_spots = Overlay.CreateGraphical(GetViewportX(), 0, backgr_hotspots.Graphic, false);
          Overlay* current_spot = Overlay.CreateGraphical(GetHotspotPointX(GetGlobalInt(202)), GetHotspotPointY(GetGlobalInt(202)), 0, true);
          backgr_hotspots = DynamicSprite.CreateFromScreenShot();
          //Wait(40);
          show_spots.Remove();
          current_spot.Remove();
        }
        SetGlobalInt(202, GetGlobalInt(202) + 1);

      }
      Overlay* all_hotspots = Overlay.CreateGraphical(GetViewportX(), 0, backgr_hotspots.Graphic, false);
      //Wait(80); 
      backgr_hotspots.Delete();
      SetGlobalInt(202,0);
      all_hotspots.Remove();
    }
  }
Zunächst einmal erscheinen nicht alle Overlays auf dem Screenshot, daneben werden die Overlays show_spots und all_hotspots nicht immer am linken Bildschrimrand gezeichnet (obwohl die X-Koordniate durch GetViewportX() berechnet wird).
>>Laverne, wie bist du nach oben gekommen?<<
>>Ich bin oben? Ups.<<
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Gute Idee für eine "Hotspot-Anzeige"?

Beitrag von KhrisMUC »

Ich hab sowas vor längerer Zeit mal als Modul gemacht und es gerade noch ein bisschen überarbeitet, damit die Charaktere die Einblendung nicht verdecken und scrollende Räume unterstützt werden: ShowHotspots1.1.scm für 2.72 (.doc entfernen)

Bei Objekten wird die Mitte des Sprites verwendet, bei Hotspots die Mitte der Fläche (in X- und Y-Richtung wird jeweils jeder zweite Pixel überprüft und der Durchschnitt der kleinsten und größten Koordinaten genommen).

Damit die Einblendung zuoberst angezeigt wird, gehe ich so vor:

Bei Drücken der Taste:
-Backup des Screens
-Screenshot -> DynamicSprite
-Objekte und Charaktere ausblenden
-Screenshot zeichnen (alles sichtbar, aber Teil des Hintergrunds)
-Einblendung drüber malen

Bei Loslassen der Taste:
-Wiederherstellung des Screens
-Objekte und Charaktere einblenden
Use gopher repellent on funny little man
Kruttan
Adventure-Gott
Adventure-Gott
Beiträge: 4009
Registriert: 29.12.2001, 15:46
Wohnort: Hameln/Göttingen
Kontaktdaten:

Re: Gute Idee für eine "Hotspot-Anzeige"?

Beitrag von Kruttan »

Wow, so geht es natürlich auch ;) Schon ein sehr kompfortables Modul, tausend Dank!!! :)
>>Laverne, wie bist du nach oben gekommen?<<
>>Ich bin oben? Ups.<<
Antworten