режим кнопки загрузчика - PullRequest
0 голосов
/ 26 марта 2011

Я написал фрагмент кода слайдера изображений, где я могу загрузить изображения из XML. все идет хорошо, но когда я хочу сделать режим кнопки загруженного изображения, он идет не так и seys:

"ReferenceError: Ошибка # 1056: невозможно создать свойство buttonMode для flash.display.Loader."

вот полный код:

    import flash.display.Stage;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.xml.XMLDocument;
    import flash.text.TextField;
    //tween - start
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    import fl.transitions.TweenEvent;
    import flash.events.MouseEvent;
    //tween - end
    //timer-start
    import flash.utils.Timer;
    //timer-end

        var myStage:Stage = this.stage;
        myStage.scaleMode = StageScaleMode.NO_SCALE;
        myStage.align = StageAlign.TOP_LEFT;

        var sliderXML:XML = new XML();
        var sliderXMLurl:String = 'sliderXML.xml';
        var sliderXMLreq:URLRequest = new URLRequest(sliderXMLurl);
        var sliderXMLloader:URLLoader = new URLLoader(sliderXMLreq);
        sliderXMLloader.addEventListener("complete",loadXML);

        var sliderNum:int = 0;
        var sliderMaxNum:int = 0;
        var LastSliderNum:int = 0;
        var strTitle:Array = [];
        var strPosterLink:Array = [];
        var strVideoLink:Array = [];
        var poster:Array = [];

        var Playing:int = 1;


    addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
    myStage.addEventListener(Event.RESIZE, ResizeHandler);

    var myTimer:Timer = new Timer(10000); //10 second
    myTimer.addEventListener(TimerEvent.TIMER, viewNext);
    myTimer.start();

    function fl_EnterFrameHandler(event:Event):void
    {
        var swfWidth:int = myStage.stageWidth;
        var swfHeight:int = myStage.stageHeight;
        slider_bg.width = swfWidth;
        slider_bg.height = swfHeight;
    }

    function loadXML(event:Event):void{

        sliderXML=XML(sliderXMLloader.data);
        var xmlDoc:XMLDocument = new XMLDocument();
        xmlDoc.ignoreWhite = true;
        var menuXML:XML = XML(sliderXMLloader.data);
        xmlDoc.parseXML(menuXML.toXMLString());

        //var X:int = 100;

        for each(var listItem:XML in sliderXML..listItem){

                 strTitle[sliderMaxNum] = listItem.itemTitle.toString();
                 strPosterLink[sliderMaxNum] = listItem.posterLink.toString();
                 strVideoLink[sliderMaxNum] = listItem.videoLink.toString();

                 var _temp:Loader = new Loader();
                 poster.splice(sliderMaxNum, 0, _temp);
                 poster[sliderMaxNum].load(new URLRequest(strPosterLink[sliderMaxNum]));
//i think that here must be done something
                 addChild(poster[sliderMaxNum]);
                 poster[sliderMaxNum].x = myStage.stageWidth;
                 poster[sliderMaxNum].y = 28;
                 poster[sliderMaxNum].buttonMode = true;



                 poster[sliderMaxNum].addEventListener(MouseEvent.CLICK, poster_click(sliderMaxNum));

                 sliderMaxNum = sliderMaxNum+1;
                 }
        LastSliderNum = sliderMaxNum - 1;
        //*************************************************
        var myTween:Tween = new Tween(poster[sliderNum],'x',Strong.easeOut,poster[sliderNum].x,(myStage.stageWidth - 640)/2,2,true);
        //*************************************************
    }

Я думаю, что здесь есть проблема:

for each(var listItem:XML in sliderXML..listItem){

                 strTitle[sliderMaxNum] = listItem.itemTitle.toString();
                 strPosterLink[sliderMaxNum] = listItem.posterLink.toString();
                 strVideoLink[sliderMaxNum] = listItem.videoLink.toString();

                 var _temp:Loader = new Loader();
                 poster.splice(sliderMaxNum, 0, _temp);
                 poster[sliderMaxNum].load(new URLRequest(strPosterLink[sliderMaxNum]));
//i think that here must be done something
                 addChild(poster[sliderMaxNum]);
                 poster[sliderMaxNum].x = myStage.stageWidth;
                 poster[sliderMaxNum].y = 28;
                 poster[sliderMaxNum].buttonMode = true;



                 poster[sliderMaxNum].addEventListener(MouseEvent.CLICK, poster_click(sliderMaxNum));

                 sliderMaxNum = sliderMaxNum+1;
                 }

Ответы [ 4 ]

0 голосов
/ 27 марта 2011

Я нашел решение и внес некоторые изменения, так что теперь мой код выглядит так:

             var _temp:Loader = new Loader();
             poster.splice(sliderMaxNum, 0, _temp);
             poster[sliderMaxNum].load(new URLRequest(strPosterLink[sliderMaxNum]));
         poster[sliderMaxNum].contentLoaderInfo.addEventListener(Event.COMPLETE, loadedImage);


function loadedImage(event:Event):void {
   posterWidth[sliderMaxNum] = event.target.content.width;
   posterHeight[sliderMaxNum] = event.target.content.height;
   var PosterSprite:Sprite    = new Sprite();
   PosterSprite.addChild(poster[sliderMaxNum]);
   PosterSprite.buttonMode    = true;
   PosterSprite.useHandCursor = true;
   addChild(PosterSprite);
   poster[sliderMaxNum].x = myStage.stageWidth;
   poster[sliderMaxNum].y = 28;

   poster[sliderMaxNum].addEventListener(MouseEvent.CLICK, poster_click(sliderMaxNum));

   sliderMaxNum = sliderMaxNum+1;
}

, так что все здесь работает нормально.и большое спасибо всем вам !!!!!!!!!

0 голосов
/ 27 марта 2011

Вы можете завернуть загрузчиков в их собственные спрайты:

             var _temp:Loader = new Loader();
             poster.splice(sliderMaxNum, 0, new Sprite());
             poster[sliderMaxNum].addChild(_temp);
             _temp.load(new URLRequest(strPosterLink[sliderMaxNum]));
             addChild(poster[sliderMaxNum]);
             poster[sliderMaxNum].x = myStage.stageWidth;
             poster[sliderMaxNum].y = 28;
             poster[sliderMaxNum].buttonMode = true;
0 голосов
/ 27 марта 2011

Вы пробовали это:

poster[sliderMaxNum].contentLoaderInfo.content.buttonMode = true;
0 голосов
/ 26 марта 2011

Краткий ответ: объект, который у вас есть в массиве постеров, является загрузчиком, а не спрайтом.buttonMode на самом деле является свойством класса Sprite.Loader связан со Sprite тем, что оба они происходят от DisplayObject, но у loader есть несколько уникальных свойств, и он более или менее живет в своей собственной ветви семейного древа.

Вы можете сделать что-то подобное.Найдите строку «poster [sliderMaxNum] .buttonMode = true» и измените ее так, чтобы она выглядела примерно так:

Sprite(poster[sliderMaxNum].content).buttonMode = true;

Это должно дать вам поведение, которое вы хотите.Это не совсем красиво и не безопасно для типов (то есть, если вы добавите к постеру что-то кроме Loader, оно сломается), но для ваших целей это должно сработать.

Дайте мне знать, если это решит проблемуили если какая-то часть этого сбивает с толку.

Ура!

...