Pixelagents Blog

Flash Actionscript: Prüfen, ob die Maus (mouse) auf der Bühne (stage) ist oder den Bereich des swf verlassen hat. (7)

von Jerry
am Mittwoch, 11. April 2007 um 23:40 - 4,929 aufgerufen

Ein 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!

Social Bookmarks
These icons link to social bookmarking sites where readers can share and discover new web pages.
  • blogmarks
  • del.icio.us
  • De.lirio.us
  • digg
  • Fark
  • feedmelinks
  • Furl
  • LinkaGoGo
  • Ma.gnolia
  • co.mments
  • NewsVine
  • Simpy
  • Spurl
  • TailRank
  • Wists
  • YahooMyWeb

Verwandte Artikel

7 Kommentare zu “Flash Actionscript: Prüfen, ob die Maus (mouse) auf der Bühne (stage) ist oder den Bereich des swf verlassen hat.”

  1. bossa jobim
    30. Januar 11:41
    1

    Hallo,

    Mensch, das ist genau das was ich suche, im letzten Block scheint ein Fehler versteckt zu sein, den ich leider nicht finde! Für Hilfe wäre ich dankbar. :)

    Grüße
    bossa

  2. dj
    31. Januar 10:04
    2

    Also der Fehler liegt hier:
    ‘_root._xmouse+predX

  3. dj
    31. Januar 10:13
    3

    Hier mein arbeitender Lösungsansatz:

    // 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…

    onMouseMove = function()
    {

    predX = _root._xmouse – oldX;
    predY = _root._ymouse – oldY;
    oldX = _root._xmouse;
    oldY = _root._ymouse;
    }

    onEnterFrame = function()
    {
    if ((_root._xmouse + predX) >= Stage.width-10 || (_root._ymouse + predY) >= Stage.height-10 || _root._xmouse-predX

  4. Jerry
    31. Januar 10:19
    4

    Der Fehler ist in der Zeile
    || _root._xmouse + predX <= 0

    Zwischen “<” und “=” darf kein Leerzeichen sein. Leider wird immer automatisch von Wordpress eins eingefügt, wenn ich es hier korrigiere…

    Gruce,

    _Jerry

  5. Gamer-Maus » Re: Wozu brauche ich eigentlich eine Maus… - Stubenreine Beschleunigungs-Maus
    10. März 19:04
    5

    [...] Wenn ich sehe, wie einige Leute > (nicht > nur DAUs, die sowieso) blind rumklicken! Da bin ich mit der > Tastatur > mit Shortcuts doch viel schneller. Anwendungen, die nur mit der > Maus zu > [...]

  6. ikkez
    9. April 09:13
    6

    das ist sowas von einfach und genial… super Sache, danke

  7. irie7even
    6. November 15:34
    7

    Hallo!

    1. Sehr gut, genau das hab ich gebraucht, aber

    2. was mach ich, wenn ich ein swf mit diesem Code in eine andere swf einbaue? bei mir funktionierts nicht und das sicher wegen dem _root.

    Wie kann ich das umgehen?

Kommentare