Wie könnte man eine (einfache) Deutschlandkarte mit Bundesländer für eine Navigation oder Präsentation mittels Flash und AS3 darstellen und mit dynamischen Informationen füllen? Genaue dieser Frage bin ich nachgegangen, und habe eine kleine Anleitung inkl. Beispiel dazu vorbereitet. Da ich mal ganz vermute, dass es in den nächsten Jahren kein AS1 oder AS2 mehr geben wird, wurde das Beispiel gleich mit AS3 geschrieben, was nicht immer einfach war! Von gewohnte Funktionen in AS2 muss man sich trennen und umdenken. Aber auch dazu einige Tipps in der Anleitung. Aber kommen wir nun zum kleinen Tutorial.
Zunächst brauchen wir eine Deutschlandkarte mit Bundesländer und Landesgrenzen. Am besten wäre eine Karte als Vektor-Grafik im Adobe Illustrator Format, damit wir später die einzelnen Bundesländer als MovieClips erstellen können. Eim Import von AI-Dateien können wir dann gleich einstellen, was als Grafik oder was als MovieClip angelegt werden soll.
Bei diesem Beispiel hier habe ich alle Bundesländer als MovieClips angelegt. Die Landesgrenzen sind noch mal als extra MovieClip vorhanden. Damit wir etwas für ROLL_OVER und ROLL_OUT haben, geht nun der 1. Schritt mit AS3 los.
Die komplette Karte wurde als „MC Karte” angelegt, die einzelnen Bundesländer je nach Bezeichnung - z.B. „de_bb” für Brandenburg. Jedes Bundesland-MovieClip soll dabei mit „alpha” einen MouseOver-Effekt bekommen.
// ROLL_OVER
Karte.de_bb.addEventListener(MouseEvent.ROLL_OVER,over_bb);
// ROLL_OUT
Karte.de_bb.addEventListener(MouseEvent.ROLL_OUT,out_bb);
function over_bb(e:MouseEvent) { Karte.de_bb.alpha = 1; }
function out_bb(e:MouseEvent) { Karte.de_bb.alpha = 0.5; }<map>
<areas>
<de_bw title="Baden-Württemberg"></de_bw>
<de_by title="Bayern"></de_by>
<de_be title="Berlin"></de_be>
<de_bb title="Brandenburg"></de_bb>
<de_hb title="Bremen"></de_hb>
<de_hh title="Hamburg"></de_hh>
<de_he title="Hessen"></de_he>
<de_mv title="Mecklenburg-Vorpommern"></de_mv>
<de_ni title="Niedersachsen"></de_ni>
<de_nw title="Nordrhein-Westfalen"></de_nw>
<de_rp title="Rheinland-Pfalz"></de_rp>
<de_sl title="Saarland"></de_sl>
<de_sn title="Sachsen"></de_sn>
<de_st title="Sachsen-Anhalt"></de_st>
<de_sh title="Schleswig-Holstein"></de_sh>
<de_th title="Thüringen"></de_th>
</areas>
</map>// bei AS3 muss alles ordentlich definiert werden
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
// Registriert ein Ereignis-Listener-Objekt
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
// eine URLRequest-Klasse
xmlLoader.load(new URLRequest('karte_de.xml'));
var land_obj:Object = new Object();
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
land_obj = xmlData.areas;
}// ROLL_OVER für Karte
function ok_info( str ) {
land_info.visible = true;
land_info.info.htmlText = land_obj[str].attribute('title');
}
function no_info() { land_info.visible = false; }function over_bb(e:MouseEvent) { Karte.de_bb.alpha = 1; ok_info('de_bb'); }
function out_bb(e:MouseEvent) { Karte.de_bb.alpha = 0.5; no_info(); }var bb = land_info.width;
var hh = land_info.height;
var pos_x;
var pos_y;
land_info.visible = false;
stage.addEventListener(MouseEvent.MOUSE_MOVE, kleben);
function kleben(e:MouseEvent) {
var abstand = 10;
var mitte_x = stage.width / 2;
var mitte_y = stage.height / 2;
var m_x = pos_x = stage.mouseX;
var m_y = pos_y = stage.mouseY;
if ( m_x > mitte_x ) {
pos_x = m_x - bb;
land_info.pfeil_oben.x = bb - land_info.pfeil_oben.width - 10;
land_info.pfeil_unten.x = bb - land_info.pfeil_unten.width - 10;
} else {
land_info.pfeil_oben.x = land_info.pfeil_oben.width;
land_info.pfeil_unten.x = land_info.pfeil_unten.width;
}
if ( m_y > mitte_y ) {
pos_y = m_y - hh - (abstand*2);
land_info.pfeil_oben.visible = false;
land_info.pfeil_unten.visible = true;
} else {
land_info.pfeil_oben.visible = true;
land_info.pfeil_unten.visible = false;
}
land_info.x = pos_x;
land_info.y = pos_y + (abstand*2);
}