Текстовое поле ломает MOUSE_OVER после его перемещения

У меня действительно странная проблема с событием MOUSE_OVER. Я создаю динамические вкладки, представляющие mp3-песни, содержащие текстовые поля с информацией и динамическое изображение для обложки. Я пытаюсь заставить простую MOUSE_OVER работать над всей вкладкой, чтобы вы могли выбрать следующую песню для воспроизведения.

Я использую спрайт с альфой 0, который перекрывает всю мою вкладку (включая текстовые поля) в качестве прослушивателя для MOUSE_OVER и _OUT... Я проверил, установив альфу на что-то видимое, и он действительно покрывает мою вкладку и следует за ней вокруг когда я перемещаю его (просто убедившись, что я не перемещаю вкладку, не перемещая точку доступа). Кроме того, я создаю его только после загрузки моей обложки, гарантируя, что он также покроет это.

Теперь, когда вкладка находится в верхнем положении, все отлично. Как только я перемещаю вкладку, чтобы освободить место для следующей вкладки, текстовые поля нарушают мое поведение при перелистывании... точно так же, как ошибка нуба, когда спрайт накладывается на тот, который вы слушаете MouseEvents. Но... область прокрутки все еще находится поверх поля, я установил selectable и mouseEnabled в значение false для текстовых полей... ничего.

Как будто сам факт перемещения всей вкладки теперь помещает textField поверх всего на моей вкладке (тогда как визуально он все еще находится в ожидаемом слое).

Я использую пиксельные шрифты, но пробовал и с системными шрифтами, то же самое... на этом мои мысли кончаются.

public function Tab(tune:Tune) {
    _tune = tune;
    mainSprite = new Sprite();
    addChild(mainSprite);
    drawBorder();
    createFormat();
    placeArtist();
    placeTitle();
    placeAlbum();
    coverArt();

}

private function placeButton():void {
    _button = new Sprite();
    _button.graphics.beginFill(0xFF000,0);
    _button.graphics.drawRect(0,0,229,40);
    _button.graphics.endFill();
    _button.addEventListener(MouseEvent.MOUSE_OVER, mouseListener);
    _button.addEventListener(MouseEvent.MOUSE_OUT, mouseListener);
    _button.buttonMode = true;
    mainSprite.addChild(_button);
}

private function mouseListener(event:MouseEvent):void {
        switch(event.type){
            case MouseEvent.MOUSE_OVER :
                hilite(true);
                break;
            case MouseEvent.MOUSE_OUT :
                hilite(false);
                break;
        }
}

private function createFormat():void {
    _format = new TextFormat();
    _format.font = "FFF Neostandard";
    _format.size = 8;
    _format.color = 0xFFFFFF;
}

private function placeArtist():void {
    var artist : TextField = new TextField();
    artist.selectable = false;
    artist.defaultTextFormat = _format;

    artist.x = 41;
    artist.y = 3;
    artist.width = 135;
    artist.text = _tune.artist;
    artist.mouseEnabled = false;
    mainSprite.addChild(artist);
}

private function placeTitle():void {
    var title : TextField = new TextField();
    title.selectable = false;
    title.defaultTextFormat = _format;

    title.x = 41;
    title.y = 14;
    title.width = 135;
    title.text = _tune.title;
    title.mouseEnabled = false;
    mainSprite.addChild(title);
}

private function placeAlbum():void {
    var album : TextField = new TextField();
    album.selectable = false;
    album.defaultTextFormat = _format;

    album.x = 41;
    album.y = 25;
    album.width = 135;
    album.text = _tune.album;
    album.mouseEnabled = false;
    mainSprite.addChild(album);
}

private function drawBorder():void {
    _border = new Sprite();
    _border.graphics.lineStyle(1, 0x545454);
    _border.graphics.drawRect (0,0,229,40);
    mainSprite.addChild(_border);
}

private function coverArt():void {
    _image = new Sprite();
    var imageLoader : Loader = new Loader();

    _loaderInfo = imageLoader.contentLoaderInfo;
    _loaderInfo.addEventListener(Event.COMPLETE, coverLoaded)

    var image:URLRequest = new URLRequest(_tune.coverArt);
    imageLoader.load(image);
    _image.x = 1.5;
    _image.y = 2;
    _image.addChild(imageLoader);
}

private function coverLoaded(event:Event):void {
    _loaderInfo.removeEventListener(Event.COMPLETE, coverLoaded);
    var scaling : Number = IMAGE_SIZE / _image.width;
    _image.scaleX = scaling;
    _image.scaleY = scaling;
    mainSprite.addChild (_image);
    placeButton();
}

public function hilite(state:Boolean):void{
    var col : ColorTransform = new ColorTransform();
    if(state){
        col.color = 0xFFFFFF;
    } else {
        col.color = 0x545454;
    }
    _border.transform.colorTransform =  col;
}

person Franz    schedule 14.05.2010    source источник


Ответы (1)


Починил это. Происходило то, что я не установил высоту текстового поля. Это выходило за пределы вкладки и, следовательно, лежало над ранее созданной вкладкой, блокируя MouseOver... даже не спрашивайте.

person Franz    schedule 14.05.2010