【发布时间】:2010-05-14 10:09:32
【问题描述】:
我在 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;
}
【问题讨论】:
标签: actionscript-3 mouseover textfield