动作脚本 3 菜单,带有动态加载的选项和鼠标悬停



正在处理(如标题所述)带有动态加载选项的菜单,鼠标悬停。

我所看到的事件链(这可能是有缺陷的)是:

•使用循环为 XML 文件中的每个条目放置一个空影片剪辑,每次减少一个像素数。我们将这些称为"条目"。

•在每个条目内添加一个文本字段(来自 XML 的文本),绘制一个 alpha=0 的矩形(作为鼠标悬停时的突出显示),然后从库中添加另一个影片剪辑。

•将鼠标悬停和鼠标退出事件侦听器添加到每个"条目",将不可见矩形设置为 alpha=1,并从库中更改文本和影片剪辑的颜色。

以下是启动所有这些操作的函数。 *编辑:修复了更多非常愚蠢的东西。

//Load List Options
function loadHighlight():void
{
    var yTmp:Number = 0; 
    for (var i:Number = 0; i < photo_total; i++)
    {
        var Highlight:MovieClip = new MovieClip();
        photoHighlights[i] = Highlight;
        photoHighlights[i].addEventListener(MouseEvent.MOUSE_OVER, highlightOvr);
        //Draw Invisible Rectangle
        var rectngle:Shape = new Shape();
        rectngles[i] = rectngle;
        rectngles[i].graphics.beginFill (0x0DAC54);
        rectngles[i].graphics.drawRect(0, 0, 1170, 144);
        rectngles[i].graphics.endFill();
        rectngles[i].alpha = 0;
        rectngles[i].y=yTmp;
        rectngles[i].x= 0;
        photoHighlights[i].addChildAt(rectngles[i], 0);

        //Load photosArray
        var photoname = photo_data[i].@TEXT;;
        var photolist:TextField = new TextField();
        photosArray[i] = photolist;
        photosArray[i].textColor = 0x0DAC54;
        photosArray[i].x = 26.95;
        photosArray[i].y = 92.65;
        photosArray[i].embedFonts = true;
        photosArray[i].antiAliasType = AntiAliasType.ADVANCED;
        photosArray[i].defaultTextFormat = listformat;
        photosArray[i].selectable = false;
        photosArray[i].wordWrap = true;
        photosArray[i].text = photoname;
        photosArray[i].autoSize = TextFieldAutoSize.LEFT;
        photosArray[i].mouseEnabled = false;
        photoHighlights[i].addChildAt(photosArray[i], 1);

        //Load thumbFrames
        var thumbFrame:thmbFrame = new thmbFrame();
        thumbFrame.x= 962;
        thumbFrame.y= 21;
        photoHighlights[i].addChildAt(thumbFrame, 1);
        thmbFrames.push(thmbFrame);
        MediaPage.photoSelect.photoList.addChild(photoHighlights[i]);
        yTmp = yTmp + 153;
    }
}
function  highlightOvr(event:MouseEvent):void
{
    event.target.rectngles.alpha=1;             
    event.target.photosArray.textColor = 0x000000;
    event.target.thmbFrames.color = 0x000000;
    event.target.addEventListener(MouseEvent.MOUSE_OUT, highlightOut);  
}
function  highlightOut(event:MouseEvent):void
{
    event.target.rectngles.alpha = 0;
    event.target.photosArray.textColor = 0x0DAC54;
    event.target.thmbFrames.color = 0x0DAC54;
    event.target.removeEventListener(MouseEvent.MOUSE_OUT, highlightOut);
}

现在的问题变成了一个参考放置的电影剪辑的孩子的问题。我知道这是不对的:

event.target.rectngles.alpha = 0;

我只是不知道是什么。如何引用生成的影片剪辑及其子级?

我知道有一个简单的方法可以做到这一点,但我不知道它是什么。

此外,根据ShaunHusain的回应,我这样做的方式似乎有点复杂。任何指向措辞清晰的资源的链接,解释实现此目的的更有效方法,我们将不胜感激。

再次感谢,-T.

编辑:修复了我所做的一些令人难以置信的愚蠢事情。

我一直在寻找的非常简单的答案是使用 getChildAt 命令。所以代替:

function  highlightOvr(event:MouseEvent):void
{
    event.target.rectngles.alpha=1;             
    event.target.photosArray.textColor = 0x000000;
    event.target.thmbFrames.color = 0x000000;
    event.target.addEventListener(MouseEvent.MOUSE_OUT, highlightOut);  
}

它应该是:

function  highlightOvr(event:MouseEvent):void
{
    event.target.getChildAt(0).alpha=1;             
    event.target.getChildAt(1).textColor = 0x000000;
    event.target.getChildAt(2).color = 0x000000;
    event.target.addEventListener(MouseEvent.MOUSE_OUT, highlightOut);  
}

我可能会补充一点,.color 命令使用不正确。我试图将其应用于影片剪辑,而我需要创建一个具有所需颜色的新 ColorTransform 变量,并按如下所示应用它:

var MyColorTransform:ColorTransform = new ColorTransform();
MyColorTransform.color = 0x000000;
event.target.getChildAt(2).transform.colorTransform = MyColorTransform;

最新更新