Flash Actionscript: Prüfen, ob die Maus (mouse) auf der Bühne (stage) ist oder den Bereich des swf verlassen hat.
von Jerry am Mittwoch, 11. April um 23:40 - 4,929 aufgerufenEin altes Problem, mit denen Flasher immer wieder zu kämpfen hatten, wurde nun in AS3.0 gelöst: da gibt es einen Event, der ausgelöst wird, wenn die Maus die Stage verlassen hat. Wie ist es aber in Actionscript und Actionscript 2.0? Eine nur selten zufrieden stellende Möglichkeit war es, einen großen unsichtbaren Button über die ganze Bühne zu legen. Allerdings kollidierte er stets mit anderen Buttons. Außerdem wurde der Event nicht ausgelöst (oder sagt man hier “das Ereignis nicht gebroadcastet“?), wenn die Maus zu schnell aus dem Flashbereich gezogen wurde.
Eine andere Lösung muss her! Der Trick: Man macht sich die Geschwindigkeit der Maus zunutze (aktuelle Position minus alte Position) und errechnet daraus, wo die Maus als nächstes sein wird! Wird sie als nächstes außerhalb der Bühne sein, wird der Event ausgelöst. Hier einmal ein Beispiel zur Praxis:
// mouse on stage detection
var predX:Number // prediction, also Vorhersage der X-Position
var predY:Number
var oldX:Number; // alte X-Position
var oldY:Number;
var offStage:Boolean; // Schalter, ob die Maus auf der Bühne ist oder nicht…
In einem onMouseMove-Event wird die “Prediction” errechnet und vorher noch geschaut, ob die Maus gerade wieder in die Stage eingetreten ist:
onMouseMove = function()
{
if (offStage)
{
trace(”Maus ist wieder auf der Stage!”);
}
offStage = false;
predX = _root._xmouse – oldX;
predY = _root._ymouse – oldY;
oldX = _root._xmouse;
oldY = _root._ymouse;
};
In dem onEnterFrame-Event wird nun geprüft, ob die nächste Mausposition die Maße der Bühne verlässt und ggf. die Variable offStage auf true gestellt.
onEnterFrame = function ()
{
if ((_root._xmouse + predX) >= Stage.width
|| (_root._ymouse + predY) >= Stage.height – 10
|| _root._xmouse + predX < = 0
|| _root._ymouse + predY <= 0)
{
trace("Maus hat die Stage verlassen!");
predX = 0;
predY = 0;
offStage = true;
}
};
Ich hoffe, der Eine oder Andere wird sich über die Lösung dieses Problems freuen! Ich habe mich sehr gefreut…
Vielleicht gibt es ja sogar noch eine andere Lösung – dann immer her damit!


