Wie um zu überprüfen, ob sich der Mauszeiger über einem MovieClip?
Keine Zuhörer beteiligt. Die Sache ist die, die ich verwenden kann MOUSE_OVER und MOUSE_OUT Hörer, aber wenn Sie ziehen Sie die Maus über einen MovieClip schnell genug, einer dieser Zuhörer kann nicht aktiviert werden. Ich habe es mehrere Male probiert.
Einige Kommentatoren haben darauf hingewiesen, daß die beste - Lösung (Leistung, Einfachheit, Genauigkeit, etc...) hängt direkt von der Art der Objekte, Sie sind der Umgang mit und Ihr Verhalten: sind Ihre Formen unregelmäßig? könnten Sie annähernd die Form, um so etwas wie Kreise oder Rechtecke? tun Sie in der Form ändern? wie? Sie haben eine begrenzte/reduzierte Anzahl von Formen?... sind Sie in Bewegung? unabhängig von einander? sind Sie überlappend auf eine bestimmte Weise? etc etc...
Sie haben separate Listener für jedes Objekt?
Sie haben separate Listener für jedes Objekt?
InformationsquelleAutor nicks | 2012-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Maus übergeben "schnell genug" ist, dann vielleicht das OS nicht senden Sie alle Maus-Ereignisse an Flash für den Teil des Bildschirms, in den ersten Platz. Bewegen Sie die Maus viel schneller als seine Auflösung Schießen kann (oder das Betriebssystem verarbeiten kann) haben den Effekt, den Sie erleben (und die Wahrheit ist, keine Maus-events behandelt wurden für diesen Teil des Bildschirms), sonst MOUSE_OVER wird sicherlich Feuer (wenn die Maus tatsächlich generieren mindestens ein move-Ereignis über einen Film-clip).
Des MOUSE_OUT-Ereignis, jedoch könnte nicht ausgelöst, wenn die Maus die Bühne verlässt-Bereich (Blätter Flash), weil von verschiedenen OS oder browser-Sicherheit Einschränkungen.
Dieses Problem zu beheben, registrieren Sie die Zuhörer für Bühne::flash.Veranstaltungen.Event.DEAKTIVIEREN und Bühne::flash.Veranstaltungen.Event.MOUSE_LEAVE, in jedem Sprite/MovieClip-Sie werden auch hören bei MOUSE_OUT, und dabei die gleiche handler-Funktion.
Den mouseLeave-event (ausgelöst von der Bühne) ist speziell für Ihr problem: "Ausgelöst durch das Stage-Objekt, wenn der Mauszeiger bewegt sich aus dem Bühnenbereich. Wenn die Maustaste gedrückt wird, wird das Ereignis nicht ausgelöst." Wenn es ausgelöst wird, das sollte man behandeln wie MOUSE_OUT für jeden movieclip in einem MOUSE_OVER "Staat" (angeblich haben Sie einen solchen Zustand). Wenn die Maustaste gedrückt wurde, wenn es von der Bühne gelassen-Bereich, wird der Benutzer wahrscheinlich lassen Sie Sie an einem gewissen Punkt und DEAKTIVIEREN, wird das Feuer auf der Bühne statt.
InformationsquelleAutor Tiberiu-Ionuț Stan
Ich hatte noch nie ein problem mit mouseOver und mouseOut.
Aber Sie können hitTestPoint:
Konnte man auch mit der Bühne.mouseX und Bühne.mouseY (und nicht localToGlobal), wenn Sie sicher sind, dass diese Eigenschaft verfügbar ist, und festlegen, von wo aus Sie anrufen.
Habe ich noch nicht getestet der code, aber ich denke, es sollte funktionieren.
(edit)
Aber wenn Sie wollen, um absolut sicher zu sein, dass die Maus ging über ein Objekt - selbst wenn Sie so schnell gehen vollständig zu überspringen, würden Sie haben zu prüfen, für die Punkte zwischen Maus Punkte von zwei frames.
Es machen würde, zum Beispiel:
Könnte man denken, wenn der Letzte Staat war immer und versenden Sie ein benutzerdefiniertes Ereignis aus, wenn isOver != wasOver. Wenn Sie tun, dass innerhalb der while-Schleife erhalten Sie eine sehr genaue Maus über die Erkennung.
Aber ich Wette, dass hitTestPoint mit shapeFlag = true ist ziemlich CPU schwer, besonders wenn viel in einem frame. Also in diesem Fall möchten Sie möglicherweise festlegen, dass dieser MAX_DIST so hoch wie Sie können.
Der Vorteil ist die pixel-Erkennung, wenn Sie es brauchen. Die beste Lösung hängt wirklich davon ab, was die Erkennung verwendet werden sollen.
InformationsquelleAutor L0LN1NJ4
Benutzen Mathematik dann.
Beachten Sie, dass es hängt von der movieclips reg Punkt... in diesem Fall die reg Punkt in der Mitte ist der movieclip.
Eine weitere Möglichkeit ist
hitTestObject()
eine eingebaute Funktion mitshapeFlag = true;
.hitTestObject()
Funktion?InformationsquelleAutor Zhafur
Können Sie auch hören, für die Bühne Maus bewegen und überprüfen, welche clips sind unter Maus :
und prüfen Sie, ob Ihr MovieClip ist im inneren array .
InformationsquelleAutor turbosqel