У меня действительно странная проблема с событием 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;
}