2010-05-14 12 views
0

J'ai un problème vraiment étrange avec l'événement MOUSE_OVER. Je construis des onglets dynamiques représentant des chansons mp3 contenant des champs de texte avec des informations et une image dynamique pour la pochette. J'essaie d'obtenir un MOUSE_OVER simple qui fonctionne sur l'ensemble de l'onglet, de sorte que vous pouvez sélectionner la prochaine chanson à jouer. J'utilise un Sprite avec alpha 0 qui recouvre tout mon onglet (y compris textFields) comme Listener pour MOUSE_OVER et _OUT ... J'ai vérifié en plaçant l'alpha à quelque chose de visible et il couvre en effet mon onglet et le suit quand je le déplace (juste en m'assurant que je ne bouge pas l'onglet sans déplacer le hotspot). De plus, je ne fais que le créer une fois que ma pochette est chargée, en veillant à ce qu'elle le couvre aussi. Maintenant, lorsque la languette est en position haute, tout est dandy. Dès que je déplace l'onglet pour faire de la place pour l'onglet suivant, les textFields cassent mon comportement de roulis ... juste comme cette erreur noob de superposer une image-objet à celle sur laquelle vous écoutez pour MouseEvents. Mais ... la zone de roulis est toujours au-dessus du champ, j'ai défini selectable et mouseEnabled sur false sur le textFields ... rien.TextField briser MOUSE_OVER après l'avoir déplacé

C'est comme si le simple fait de déplacer la totalité de l'onglet mettait maintenant textField au-dessus de tout dans mon onglet (alors que visuellement, il est toujours dans sa couche attendue). J'utilise des polices de pixels, mais j'ai essayé avec les polices système, la même chose ... à mon esprit ici.

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

Répondre

0

L'a corrigé. Ce qui se passait, c'est que je n'ai pas défini la hauteur du champ de texte. Cela dépassait l'onglet et par conséquent se trouvant sur l'onglet précédemment instancié, bloquant MouseOver ... ne demande même pas.