Я создаю спрайт, затем добавляю дочерний спрайт.
Я добавляю слушателя для потомков для событий MOUSE_OUT.
Если моя мышь находится в дочернем спрайте, когда я устанавливаю родительский спрайт mouseEnabled = false и mouseChildren = false, MOUSE_OUT не запускается для дочернего объекта.
Но затем, когда я двигаю мышь, MOUSE_OUT запускается для ребенка. MOUSE_OUT также запускается, если я нажимаю. MOUSE_OUT не срабатывает, если я вращаю колесо мыши.
Итак, что здесь происходит?
Это связанный вопрос .
После изучения кода back2dos я обнаружил, что я делаю по-другому, вызывая stage.focus = null непосредственно перед установкой mouseChildren = mouseEnabled = false. Я устанавливаю фокус сцены на нуль, чтобы убрать мигающий курсор из текстового поля ... Есть ли лучший способ сделать это?
вот модифицированный код back2dos. шаги для воспроизведения: нажмите на текстовое поле, получите мигающий курсор. нажмите «кнопку», но не перемещайте мышь между вниз и вверх. обратите внимание, что курсор не мигает (хорошо). Также обратите внимание, что события mouse_out на кнопке не сработали. пока вы не двигаетесь или не щелкаете мышью.
package {
import flash.display.*;
import flash.events.*;
import flash.geom.ColorTransform;
public class Test extends Sprite {
private var child:Sprite
public function Test() {
this.addChild(child = new Sprite());
child.graphics.beginFill(0xFF0000);
child.graphics.drawRect(0, 0, 100, 20);
child.addEventListener(MouseEvent.CLICK, onClick);
child.addEventListener(MouseEvent.MOUSE_OUT, onOut);
child.addEventListener(MouseEvent.MOUSE_OVER, onOver);
tf = new TextField( );
tf.backgroundColor = 0xFF00AA;
tf.background = true;
tf.type = TextFieldType.INPUT;
tf.text = "yo";
tf.y = 100;
this.addChild( tf );
}
private function onOver(e:MouseEvent):void {
child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF);
}
private function onOut(e:MouseEvent):void {
child.transform.colorTransform = new ColorTransform();
}
private function onClick(e:MouseEvent):void {
//try it here...
stage.focus = null;
this.mouseChildren = this.mouseEnabled = false;
//or try it here...
//stage.focus = null;
}
}
}