2009-05-30 7 views
1

Ich bekomme ein ungewöhnliches Verhalten, das ich nicht auf den Grund zu kommen scheinen. Wenn ich das mache, wenn ich in den SWF-Bereich gehe, verfolgt es normalerweise beim Bewegen der Maus. Zu erwarten.AS3 Projekt - Maus Move Listener Reagieren außerhalb der Anwendung

Aber es ist Ablaufverfolgung für das Ereignis bewegen, wenn ich überall auf dem Bildschirm klicken. Wenn ich klicke und ziehe, zeichnet es auf, als ob ich mich im SWF-Bereich des Browsers bewegen würde.

Hier ist der Code. Ich habe es zu Barebones vereinfacht. Setzen Sie das einfach in ein leeres AS3-Projekt in Flex namens "Engine" - offensichtlich ohne Anführungszeichen.

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')] 
public class Engine extends Sprite 
{  
    public function Engine() 
    { 
     // Add the mouse handlers 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
    } 

    public function mouseMoveHandler(evt:MouseEvent):void 
    { 
     trace("move"); 
    } 
} 
} 

Als Abhilfe, die ich die MOUSE_MOVE ein MOUSE_OVER hinzufügen haben und entfernen Sie sie auf MOUSE_OUT. Aber das Verhalten scheint immer noch ziemlich ungewöhnlich und ich wäre daran interessiert zu verstehen, warum es passiert.

Kann mir jemand sagen, wie ich die Ereignisse auf die tatsächliche Phase der Anwendung beschränkt halten kann?

Antwort

0

Wenn Sie in Ihren Flash-Film klicken und die Maus darüber ziehen, wird das MOUSE_MOVE-Ereignis weiterhin ausgelöst, bis Sie die Maustaste loslassen. MOUSE_LEAVE wird nur ausgelöst, wenn Sie die Maus außerhalb des Players freigeben. So funktioniert Flash Player.

Vielleicht irre ich mich, aber ich denke nicht, dass Sie dieses Verhalten ändern können.

+1

Ja, das Sinn machen würde. Dies ist nicht das Verhalten, auf das ich mich beziehe. Wenn ich auf dem Bildschirm * ANYWHERE * klicke ... eine andere Anwendung, eine Apple-Leiste, was auch immer ... es registriert ein Move-Event. Auch wenn es für Flash keinen möglichen Fokus gibt. – grey

+0

Entschuldigung, ich kann dieses Verhalten nicht mit Ihrem Code reproduzieren. Können Sie weitere Details wie FP-Version, OS, ... posten –

+0

Sicher, tut mir leid für die Verzögerung in der Antwort. Flash Player-Version - Debug, MAC 10,0,22,87 – grey

1

Wie bereits erwähnt, können Sie nicht verhindern, dass diese Ereignisse ausgelöst werden. Sie werden ausgelöst, bis Sie die Maustaste loslassen.

Sie können die Koordinaten des MouseEvent mit den Grenzen der Bühne vergleichen und diese außerhalb ignorieren.

public function mouseMoveHandler(evt:MouseEvent):void 
{ 
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth && 
     evt.stageY >= 0 && evt.stageY <= stage.stageHeight) 
    { 
     trace("move"); 
    } 
} 
+0

Wieder. Ich spreche nicht nur, wenn der SWF oder sogar der Browser den Fokus hat. ANY clicks registrieren ein Bewegungsereignis in einer beliebigen Anwendung, einem beliebigen Fokus. – grey

Verwandte Themen