移动它后,TextField打破MOUSE_OVER

时间:2010-05-14 10:09:33

标签: actionscript-3 mouseover textfield

我对MOUSE_OVER事件有一个非常奇怪的问题。我正在构建动态标签,表示包含带有信息的文本字段和封面艺术的动态图像的mp3歌曲。我想在整个标签上设置一个简单的MOUSE_OVER,以便您可以选择下一首要播放的歌曲。

我正在使用带有alpha 0的Sprite,它将我的整个标签(包括textFields)覆盖为MOUSE_OVER和_OUT的监听器...我已经通过将alpha设置为可见的东西来检查它确实覆盖了我的标签和当我移动它时跟随它(只是确保我没有移动标签而不移动热点)。此外,我只在我的封面艺术加载后创建它,确保它也将覆盖它。

现在,当标签位于顶部位置时,一切都很花哨。一旦我移动选项卡为下一个选项卡腾出空间,textFields就会破坏我的滚动行为......就像那个精灵错误将精灵覆盖在你正在监听MouseEvents的那个上面一样。但是......滚动区域仍然位于字段的顶部,我在textFields上将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;
}

1 个答案:

答案 0 :(得分:0)

修正了它。发生的事情是我没有设置文本字段的高度。这是超过选项卡,因此躺在以前实例化的选项卡上,阻止MouseOver ...甚至不问。