0

(タイトルが示すように)マウスオーバーで動的にロードされるオプションを含むメニューに取り組んでいます。

私が見ている一連のイベント(これには欠陥がある可能性があります)は次のとおりです。

•ループを使用して、XML ファイルのエントリごとに 1 つの空の MovieClip を、毎回ピクセル数ずつ下に配置します。これらを「エントリ」と呼びます。

•各エントリ内に textField (XML からのテキスト) を追加し、alpha=0 の長方形を描画し (マウスオーバーでハイライトされるように)、ライブラリから別のムービークリップを追加します。

•mouseover & mouseout eventListeners を各「エントリ」に追加して、非表示の四角形を 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);
}

問題は、配置された movieClips の子を参照することの 1 つになりました。私はこれが正しくないことを知っています:

event.target.rectngles.alpha = 0;

何がなんだかわからない。生成された movieClip とその子を参照するにはどうすればよいですか?

これを行う簡単な方法があることは知っていますが、それが何であるかはわかりません。

また、ShaunHusain の回答によると、私がこれを行っている方法は少し複雑なようです。これを達成するためのより効率的な方法を説明している明確な言葉のリソースへのリンクは大歓迎です。

もう一度ありがとう、-T。

編集:私がしたいくつかの信じられないほど愚かなことを修正しました。

4

1 に答える 1

0

私が探していた非常に単純な答えは、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;
于 2012-07-13T23:23:06.123 に答える