TextField нарушает MOUSE_OVER после его перемещения - PullRequest
0 голосов
/ 14 мая 2010

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

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

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

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

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

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;
}

1 Ответ

0 голосов
/ 14 мая 2010

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

...