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

HowTo: Bis 256 Klickbereiche in einer Grafik (Director 8)

 

 

 

Home
Workshop-Seite

Hier finden Sie Hinweise, wie Sie diese Technik auch schon in Director 7 einsetzen können.

Mit Imaging Lingo (neu eingeführt in Director 8, vorher waren einzelne Befehle undokumentiert bereits vorhanden) lassen sich Farbwerte eines Bitmapdarstellers in RGB auslesen. Das bietet die Möglichkeit, eine am Bildschirm unsichtbare "Clickmap" für Sprites 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 mehr als genug sein, und die Bearbeitung ist deutlich einfacher...

Das benötigte Imaging-Lingo-Inventar beschränkt sich auf die Funktion getpixel():

put member(m).image.getpixel(point(100,100))
-- paletteIndex( 17 )
put member(m).image.getpixel(point(100,100), #integer)
-- 17

put member(m).image.getpixel(point(100,100))
-- rgb( 248, 152, 0 )
put member(m).image.getpixel(point(100,100), #integer)
-- 32352 -- 16 Bit-Darsteller
--
-25600 -- 32 Bit-Darsteller; Bug?!

Hier sind die ersten vier Zeilen typische Rückgabewerte für 8-Bit-Bilder, der zweite Block wäre normal bei 32-Bit-Bildern. Anders als beim in Director 7 verfügbaren getpixel() ist nun der Rückgabewert ein normales Farbobjekt, es sei denn, Sie spezifizieren über den optionalen Parameter #integer, daß Sie einen Integerwert erhalten wollen.




 

 

 

 

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




 

 

 

 

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.

Joachim Gola




 


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