Scrollen eines Containers innerhalb eines maskierten Rechtecks, das kleiner als die Bühne ist

In der nachstehenden swf-Datei lässt sich der Container innerhalb eines Rechtecks, das kleiner als die gelbe Bühne ist, scrollen.

 

 

Um einen Container, der größer als die Bühne ist, innerhalb eines Rechtecks, das kleiner als die Bühne ist, zu scrollen, benötigt der Container  eine Maske in der Größe des Rechtecks.

In der obigen Abbildung ist das grüne Rechteck eine Instanz maske_mc des Movieclips Maske aus der Bibliothek und das orange Rechteck ist die Bühne.
Anmerkung: Nur für die Abbildung wurde die Deckkraft des Containers mit dem Luftbild reduziert, um auch die Bühne zu zeigen.

Die vier Scrollbuttons wurden an den Rändern des grünen Rechtecks platziert.
In der Zeitleiste sieht man, dass das grüne Rechteck in der Ebene mask eine Maske für die Ebene container ist.

Das grüne Rechteck wurde in einen Movieclip verpackt, um über den Instanznamen maske_mc die Position und die Größe des Rechtecks für die  Berechnungen der Scrollgrenzen ermitteln zu können.

 
Geändertes Skript (scroll_movieclip_mask.fla):

Gegenüber dem Beispiel aus dem letzten Kapitel müssen die Funktionen nachLinks, nachRechts, nachOben und nachUnten adaptiert werden. Die hervorgehobenen Änderungen beziehen sich auf die Berechnung der Scollgrenzen relativ zum Maskenrechteck.

 

function nachLinks(e:Event) {
container_mc.x-=schrittweite;
if (container_mc.x<(maske_mc.x+maske_mc.width)-container_mc.width) {
container_mc.x=(maske_mc.x+maske_mc.width)-container_mc.width;
rechts_btn.visible=false;
container_mc.removeEventListener(Event.ENTER_FRAME, nachLinks);
}
}
function nachRechts(e:Event) {
container_mc.x+=schrittweite;
if (container_mc.x>maske_mc.x) {
container_mc.x=maske_mc.x;
links_btn.visible=false;
container_mc.removeEventListener(Event.ENTER_FRAME, nachRechts);
}
}
function nachOben(e:Event) {
container_mc.y-=schrittweite;
if (container_mc.y<(maske_mc.y+maske_mc.height)-container_mc.height) {
container_mc.y=(maske_mc.y+maske_mc.height)-container_mc.height;
unten_btn.visible=false;
container_mc.removeEventListener(Event.ENTER_FRAME, nachOben);
}
}
function nachUnten(e:Event) {
container_mc.y+=schrittweite;
if (container_mc.y>maske_mc.y) {
container_mc.y=maske_mc.y;
oben_btn.visible=false;
container_mc.removeEventListener(Event.ENTER_FRAME, nachUnten);
}
}
 

Die Abbildung zeigt wie für die Funktion nachLinks die Grenze berechnet wird, über die der Container nicht weiter nach links verschoben werden darf.

 

Import eines scrollbaren Containers als swf-Datei in ein anderes Flash-Movie (swf-import.fla)

Wenn man eine swf-Datei, die einen scrollbaren Container enthält, mit einem Loader und der Methode load in ein anderes Flash-Movie importiert, dann ist der Container auch über die Bühnengröße der importierten swf-Datei hinaus sichtbar.
Siehe rote Fläche in der nachstehenden Abbildung.

Die Größe des Loaders entspricht der Größe des gesamten Containers und nicht der Bühnengröße der importierten swf-Datei.

In obigem Beispiel hatte die Bühne der swf-Datei scroll_movieclip_limits.swf eine Größe von 600x450px und wurde in ein Flash-Movie mit einer Bühnengröße von 800x600px importiert. Der Container mit dem Luftbild ist über die ursprünglichen Grenzen hinaus sichtbar.

Lösung:

Wenn man also einen scrollbaren Container in ein anderes Flash-Movie importieren möchte, muss man den Container auf jeden Fall mit einer Rechtecksmaske abdecken.