Kombination der 3 Methoden

Die in den ersten drei Kapiteln erklärten Methoden lassen sich natürlich kombinieren.
Man muss nur aufpassen, dass sich die Eventhandler nicht gegenseitig stören.
In unserem Beispiel reagieren sowohl das Ziehen mit der Maus (Kapitel 1) als auch das Anklicken und automatische Verschieben des Klickpunkts in die Bühnenmitte (Kapitel 3) auf das MOUSE_DOWN-Ereignis.

In der nachstehenden swf-Datei muss man daher beim Klick zusätzlich die Strg-Taste gedrückt halten, damit der Klickpunkt in die Bühnemitte verschoben wird.

 

 

Das kombinierte Skript (kombination.fla):

Die Veränderungen und Ergänzungen sind hervorgehoben.
Vor allem muss man auch berücksichtigen, dass nicht nur beim Scrollen mit den Buttons die Ränder erreicht werden können. Daher müssen auch bei den anderen beiden Methoden die Buttons aus- und eingeblendet werden.

Deshalb wurde die Frage der Sichtbarkeit der Scrollbuttons in einen ENTER_FRAME-Eventhandler ausgelagert, der laufend prüft, ob ein Button gezeigt werden soll oder nicht.

 

// Übernommen aus Kapitel 1: Container mit bei gedrückter Maustaste ziehen
var handCursor:MovieClip = new Handcursor();
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, containerZiehen);
function containerZiehen(e:MouseEvent):void {
if (! e.ctrlKey) {
container_mc.startDrag(false,new Rectangle(stage.stageWidth-container_mc.width,stage.stageHeight-container_mc.height,container_mc.width-stage.stageWidth,container_mc.height-stage.stageHeight));
Mouse.hide();
this.stage.addChild(handCursor);
handCursor.addEventListener(Event.ENTER_FRAME, updateCursor);
}
}
this.stage.addEventListener(MouseEvent.MOUSE_UP, containerLoslassen);
function containerLoslassen(e:MouseEvent):void {
if (! e.ctrlKey) {
container_mc.stopDrag();
Mouse.show();
this.stage.removeChild(handCursor);
handCursor.removeEventListener(Event.ENTER_FRAME, updateCursor);
}
}
function updateCursor(e:Event):void {
e.target.x=stage.mouseX;
e.target.y=stage.mouseY;
}
 
// Übernommen aus Kapitel 2: Scrollen über Buttons
var schrittweite:int=5;
links_btn.addEventListener(MouseEvent.ROLL_OVER, startScrollen);
rechts_btn.addEventListener(MouseEvent.ROLL_OVER, startScrollen);
oben_btn.addEventListener(MouseEvent.ROLL_OVER, startScrollen);
unten_btn.addEventListener(MouseEvent.ROLL_OVER, startScrollen);
function startScrollen(e:MouseEvent):void {
switch (e.target) {
case links_btn :
container_mc.addEventListener(Event.ENTER_FRAME, nachRechts);
break;
case rechts_btn :
container_mc.addEventListener(Event.ENTER_FRAME, nachLinks);
break;
case oben_btn :
container_mc.addEventListener(Event.ENTER_FRAME, nachUnten);
break;
case unten_btn :
container_mc.addEventListener(Event.ENTER_FRAME, nachOben);
break;
}
}
links_btn.addEventListener(MouseEvent.ROLL_OUT, stopScrollen);
rechts_btn.addEventListener(MouseEvent.ROLL_OUT, stopScrollen);
oben_btn.addEventListener(MouseEvent.ROLL_OUT, stopScrollen);
unten_btn.addEventListener(MouseEvent.ROLL_OUT, stopScrollen);
function stopScrollen(e:MouseEvent):void {
switch (e.target) {
case links_btn :
container_mc.removeEventListener(Event.ENTER_FRAME, nachRechts);
break;
case rechts_btn :
container_mc.removeEventListener(Event.ENTER_FRAME, nachLinks);
break;
case oben_btn :
container_mc.removeEventListener(Event.ENTER_FRAME, nachUnten);
break;
case unten_btn :
container_mc.removeEventListener(Event.ENTER_FRAME, nachOben);
break;
}
}
function nachLinks(e:Event) {
e.target.x-=schrittweite;
if (container_mc.x
container_mc.x=stage.stageWidth-container_mc.width;
container_mc.removeEventListener(Event.ENTER_FRAME, nachLinks);
}
}
function nachRechts(e:Event) {
e.target.x+=schrittweite;
if (container_mc.x>0) {
container_mc.x=0;
container_mc.removeEventListener(Event.ENTER_FRAME, nachRechts);
}
}
function nachOben(e:Event) {
container_mc.y-=schrittweite;
if (container_mc.y
container_mc.y=stage.stageHeight-container_mc.height;
container_mc.removeEventListener(Event.ENTER_FRAME, nachOben);
}
}
function nachUnten(e:Event) {
container_mc.y+=schrittweite;
if (container_mc.y>0) {
container_mc.y=0;
container_mc.removeEventListener(Event.ENTER_FRAME, nachUnten);
}
}
 
// Übernommen aus Kapitel 3: Container anklicken. Klickpunkt wird in die Bühnenmitte verschoben.
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.*;

var tweenX:Tween;
var tweenY:Tween;

this.stage.addEventListener(MouseEvent.CLICK, scrollContainer);

function scrollContainer(e:MouseEvent):void {
var deltaX:int=stage.stageWidth/2-e.stageX;
var deltaY:int=stage.stageHeight/2-e.stageY;
tweenX=new Tween(container_mc,"x",Regular.easeInOut,container_mc.x,container_mc.x+deltaX,1,true);
tweenY=new Tween(container_mc,"y",Regular.easeInOut,container_mc.y,container_mc.y+deltaY,1,true);
tweenX.addEventListener(TweenEvent.MOTION_CHANGE, checkLimitsX);
tweenY.addEventListener(TweenEvent.MOTION_CHANGE, checkLimitsY);
tweenX.start();
tweenY.start();
}
function checkLimitsX(e:TweenEvent):void {
if (e.position>0||e.position
e.target.stop();
if (e.position>0) {
container_mc.x=0;
} else {
container_mc.x=stage.stageWidth-container_mc.width;
}
}
}
function checkLimitsY(e:TweenEvent):void {
if (e.position>0||e.position
e.target.stop();
if (e.position>0) {
container_mc.y=0;
} else {
container_mc.y=stage.stageHeight-container_mc.height;
}
}
}
 
// NEU: Sichtbarkeit der Scrollbuttons prüfen
this.stage.addEventListener(Event.ENTER_FRAME, checkButtons);
function checkButtons(e:Event):void {
links_btn.visible=true;
rechts_btn.visible=true;
oben_btn.visible=true;
unten_btn.visible=true;
if (container_mc.x>=0) {
container_mc.x=0;
links_btn.visible=false;
}
if (container_mc.x<=stage.stageWidth-container_mc.width) {
container_mc.x=stage.stageWidth-container_mc.width;
rechts_btn.visible=false;
}
if (container_mc.y>=0) {
container_mc.y=0;
oben_btn.visible=false;
}
if (container_mc.y<=stage.stageHeight-container_mc.height) {
container_mc.y=stage.stageHeight-container_mc.height;
unten_btn.visible=false;
}
}

 

Durch  !e.ctrlKey wird geprüft, ob NICHT beim Drücken der Maustaste zusätzlich die Strg-Taste gedrückt wurde.

In der Funktion checkButtons werden immer zuerst alle Scrollbuttons sichtbar gesetzt und dann wird für jeden Button geprüft, ob dieser nicht doch auf unsichtbar gesetzt werden muss.