D7WS HOMEPAGE WORKSHOP NEUE XTRAS GALERIE WORKSHOP Automatic Translation LESERSERVICE BUCH NEWS

HowTo: Bis 256 Klickbereiche in einer Grafik

 

 

 

Home
Workshop-Seite

Dies ist die erweiterte Fassung eines Abschnittes aus dem Buch "Director 7 Workshop". Zur Einsetzbarkeit auf den verschiedenen Plattformen beachten Sie bitte folgenden wichtigen Hinweis!

Eine in Director 7 neu eingeführte, aber undokumentierte Funktion macht es möglich, Farbwerte eines Bitmapdarstellers in RGB auszulesen. Das bietet die Möglichkeit, eine am Bildschirm unsichtbare "Clickmap" anzulegen, die prinzipiell für jeden Farbwert eine andere Aktion starten kann – also (theoretisch) Millionen Klickbereiche. Sinnvollerweise sollte die Clickmap aber in 8 Bit Farbtiefe angelegt werden. Bis zu 256 Hotspots im Bild sollten immer noch mehr als genug sein, und die Bearbeitung ist deutlich einfacher.




 

 

 

 

Hinweis von Joachim Kathmann: Diese Technik funktioniert nicht auf Windows. - Anmerkung von mir: HMPFF. Stimmt. Hätte ich mal testen müssen... Es gibt einen Bug in Director 7.0 und der deutschen 7.01, der die Koordinaten von getPixel unter Windows durcheinanderbringt. In 7.02 (hier) ist das Problem behoben. Aber: In Shockwave (Windows) wird es natürlich noch so lange weiterbestehen, wie der Player nicht auf 7.02 upgedatet wurde. Im Projektor und in der Authoring-Umgebung funktioniert alles.

Noch ein Hinweis: Für die Technik (in ein Xtra verpackt) kann man auch 199 US-$ bezahlen.
Hehe, nicht schlecht. Kauft es !

7.02 - mehr Bugs: Leider geht es weiter mit den Bugs mit dieser Funktion. Zur Erinnerung: Es handelt sich um eine undokumentierte und nicht unterstützte Funktion in Director 7 – man kann also kaum Macromedia einen Vorwurf machen... Unser Beispiel muß folgendermaßen verändert werden, damit es in Director 7.02 MAC funktioniert (auch Shockwave 7.02 Mac):

-- das funktioniert in 7.0 und 7.01
mycolorref = mymapmember.getpixel(mymemberpoint[1], mymemberpoint[2])
-- das ist in 7.02Mac hinzuzufügen, um das gleiche Ergebnis zu bekommen
mycolorref = 255 - mycolorref

Die Farbreferenzen von getpixel() sind in 7.02 Mac demnach exakt invertiert.

 




 

 

 

 

In unserem Beispiel soll das Papageienbild Hotspots erhalten, die genau die Form des Schnabels oder das Auge nachbilden. Legen Sie dafür einen leeren Bitmapdarsteller in 8 Bit Farbtiefe an, der im Besetzungsfenster direkt auf das Ausgangsbild folgt. Schalten Sie ZWIEBELSCHICHTEN im Menü ANSICHT ein, sodaß Sie im leeren Darsteller das Papageienbild durchscheinen sehen. Zeichnen Sie nun einzelne Teile mit Farben der aktuellen Palette nach und notieren Sie sich die Farbwerte (INDEX-Eintrag im Farben-Aufklappmenü des Malfensters). Die Abbildung zeigt eine detaillierte Clickmap, die folgender Zuordnung im Script entspricht:

specialslist = [225: "grüne Kappe", 101: "Gesichtsweiß", 215: "Gesichtsmaserung", 148:"Auge", 132:"Schnabel", 5: "gelbe Federn", 239:"Nasenloch"]

Die Zahlenwerte entsprechen den Indexnummern der Farben, denen hier in einer Propertylist die Bezeichnungen zugewiesen werden.

Ein alternativer Weg, eine farbenabhängige Clickmap zu erzeugen, ist, eine Farbreduktion ohne Dithering durchzuführen (MODIFIZIEREN / BITMAP TRANSFORMIEREN...). Auch dabei entstehen Farbflächen, die Sie je nach Ausgangsbild für eine Clickmap nutzen können.




 

 

 

 

Ziehen Sie das Ausgangsbild auf die Bühne und weisen Sie ihm folgendes Behavior zu:

property mymapmember, specialslist

on beginsprite me
   mymapmember = member(sprite(me.spritenum).membernum +1)
   specialslist = [225: "grüne Kappe", 101: ¬
"Gesichtsweiß", 215: "Gesichtsmaserung", 148:"Auge", ¬
132:"Schnabel",5: "gelbe Federn", 239:"Nasenloch"]
end

on mousewithin me
   mymemberpoint = sprite(me.spritenum).mapStageToMember(the mouseloc)
   if voidP(mymemberpoint) then return
   mycolorref = mymapmember.getpixel(mymemberpoint[1], mymemberpoint[2])
   -- Anzeige Specials
   if specialslist.getaprop(mycolorref) <> VOID then put ¬    specialslist.getaprop(mycolorref) into member("anzeige")
   else put " " into member("anzeige")
end




 

 

 

 

Dieses Skript zeigt im Textdarsteller "anzeige" den Text an, der in der specialsList den einzelnen Farbwerten zugeordnet ist. Entscheidend ist die Verwendung der undokumentierten Funktion getpixel(), die folgende Syntax hat:

member(memref).getpixel(punkt_x,punkt_y)
-- oder
getpixel(member(memref), punkt_x, punkt_y)

Die Umrechnung der Mauskoordinaten (the mouseloc) in Darstellerkoordninaten übernimmt die Funktion mapStageToMember; in umgekehrter Richtung geht es mit mapMemberToStage. Wie Sie in der Abbildung sehen, sind mit diesem Verfahren sehr feine Hotspot-Strukturen möglich: jedes einzelne Pixel kann aktiv sein. Da es sich allerdings um undokumentiertes Lingo handelt, sollten Sie sich nicht darauf verlassen, daß es in späteren Director-Versionen verfügbar sein wird.

Joachim Gola





Directorworkshop.de ist © Joachim Gola & Gerd Gillmaier 1998-2002. Alle Rechte vorbehalten.