Сомнение относительно переноса данных в пользовательских событиях с помощью Actionscript - PullRequest
0 голосов
/ 15 апреля 2010

Я работаю над actioncript для динамического создания SWF-файла с использованием данных JSON, поступающих из HTTP-запроса. Я получаю данные о creationComplete и пытаюсь сгенерировать древовидную структуру. Я не создаю целое дерево одновременно. Я создаю 2 уровня, уровень 1 и уровень 2. Моя цель - прикрепить пользовательские события на панели, которые представляют узлы дерева. Когда пользователи нажимают на панели, он отправляет пользовательские события и пытается создать следующий уровень. Итак, это выглядит так: По завершении создания -> получить JSON -> создать верхние уровни буксировки -> щелкнуть по уровню 2 -> создать уровень 2 и уровень 3 -> щелкнуть по уровню 3 -> создать уровень 3 и 4.… и так далее и так далее. Я прилагаю свой код к этому письму. Пожалуйста, посмотрите на это, и если у вас есть какие-либо советы о том, как вы это сделаете, если вам нужно нарисовать дерево с общим номером уровня = «n», где n = от 0 до 100 Должен ли я носить данные в классе CustomPageClickEvent. [Код]

import com.iwobanas.effects.*;
 import flash.events.MouseEvent;
 import flash.filters.BitmapFilterQuality;
 import flash.filters.BitmapFilterType;
 import flash.filters.GradientGlowFilter;
 import mx.controls.Alert;
 private var roundedMask:Sprite;
    private var panel:NewPanel;
    public var oldPanelIds:Array = new Array();

    public var pages:Array = new Array();

    public var delPages:Array = new Array();

    public function DrawPlaybook(pos:Number,title:String,chld:Object):void {
   panel = new NewPanel(chld);
            panel.title = title;
            panel.name=title;
            panel.width = 100;
            panel.height = 80;
            panel.x=pos+5;
            panel.y=40;

    var gradientGlow:GradientGlowFilter = new GradientGlowFilter();
   gradientGlow.distance = 0;
   gradientGlow.angle = 45;
   gradientGlow.colors = [0xFFFFF0, 0xFFFFFF];
   gradientGlow.alphas = [0, 1];
   gradientGlow.ratios = [0, 255];
   gradientGlow.blurX = 10;
   gradientGlow.blurY = 10;
   gradientGlow.strength = 2;
   gradientGlow.quality = BitmapFilterQuality.HIGH;
   gradientGlow.type = BitmapFilterType.OUTER;
   panel.filters =[gradientGlow];
   this.rawChildren.addChild(panel);
   pages.push(panel);
   panel.addEventListener(MouseEvent.CLICK,
    function(e:MouseEvent){onClickHandler(e,title,chld)});
   this.addEventListener(CustomPageClickEvent.PANEL_CLICKED,
    function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)});  
 }
 public function onClickHandler(e:MouseEvent,title:String,chld:Object):void {

   for each(var stp1:NewPanel in pages){
       if(stp1.title==title){
        var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
     eventObj.panelClicked = stp1;
     dispatchEvent(eventObj); 
       }
      }
 }

   private function onCustomPanelClicked(e:CustomPageClickEvent,title:String):void {

         Alert.show("onCustomPanelClicked" + title);
     var panel:NewPanel;
     for each(var stp:NewPanel in pages){
       startAnimation(e,stp);
     }
     if(title == e.panelClicked.title){
      panel = new NewPanel(null);
            panel.title = title;
            panel.name=title;
            panel.width = 150;
            panel.height = 80;
            panel.x=100;
            panel.y=40;
            this.rawChildren.addChild(panel);
            var slideRight:SlideRight = new SlideRight();
            slideRight.target=panel;
            slideRight.duration=750;
            slideRight.showTarget=true;
            slideRight.play();
            var jsonData = this.map.getValue(title);
            var posX:Number = 50;
            var posY:Number = 175;
         for each ( var pnl:NewPanel in pages){
          pages.pop();
         }
         for each ( var stp1:Object in jsonData.children){
          panel = new NewPanel(null);
          panel.title = stp1.text;
          panel.name=stp1.id;
          panel.width = 100;
          panel.id=stp1.id;
          panel.height = 80;
          panel.x = posX;
          panel.y=posY;
          posX+=150;
          var s:String="hi" + stp1.text;
          panel.addEventListener(MouseEvent.CLICK,
           function(e:MouseEvent){onChildClick(e,s);});
           this.addEventListener(CustomPageClickEvent.PANEL_CLICKED,
          function(e:CustomPageClickEvent){onCustomPnlClicked(e)});
          this.rawChildren.addChild(panel);
          pages.push(panel);
          this.addEventListener(CustomPageClickEvent.PANEL_CLICKED,
          function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)}); 
           var slide:SlideUp = new SlideUp();
                slide.target=panel;
                slide.duration=1500;
                slide.showTarget=false;
                slide.play();
            }       
     }

   }
   public function onChildClick(e:MouseEvent,s:String):void {
        for each(var stp1:NewPanel in pages){
            if(stp1.title==e.currentTarget.title){
              var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
              eventObj.panelClicked = stp1;
              dispatchEvent(eventObj); 
            }
        } 
 }      

 private function onCustomPnlClicked(e:CustomPageClickEvent):void {
    for each ( var pnl:NewPanel in pages){
          pages.pop();
         }
    }   
    private function fadePanel(event:Event,panel:NewPanel):void{
         panel.alpha -= .005;
        if (panel.alpha <= 0){
            panel.removeEventListener(Event.ENTER_FRAME, 
            function(e:Event){fadePanel(e,panel);});
        };
        panel.title=""; 
    }

    private function startAnimation(event:CustomPageClickEvent,panel:NewPanel):void{
        panel.addEventListener(Event.ENTER_FRAME, 
        function(e:Event){fadePanel(e,panel)});
    }

[/ код] Заранее спасибо. Палаш

1 Ответ

0 голосов
/ 29 апреля 2010

полностью забыл, у меня недостаточно репутации для редактирования ...

import com.iwobanas.effects.*;
import flash.events.MouseEvent;
import flash.filters.BitmapFilterQuality;
import flash.filters.BitmapFilterType;
import flash.filters.GradientGlowFilter;
import mx.controls.Alert;

private var roundedMask:Sprite;
private var panel:NewPanel;
public var oldPanelIds:Array = new Array();

public var pages:Array = new Array();

public var delPages:Array = new Array();

public function DrawPlaybook(pos:Number,title:String,chld:Object):void {
    panel = new NewPanel(chld);
    panel.title = title;
    panel.name=title;
    panel.width = 100;
    panel.height = 80;
    panel.x=pos+5;
    panel.y=40;

    var gradientGlow:GradientGlowFilter = new GradientGlowFilter();
    gradientGlow.distance = 0;
    gradientGlow.angle = 45;
    gradientGlow.colors = [0xFFFFF0, 0xFFFFFF];
    gradientGlow.alphas = [0, 1];
    gradientGlow.ratios = [0, 255];
    gradientGlow.blurX = 10;
    gradientGlow.blurY = 10;
    gradientGlow.strength = 2;
    gradientGlow.quality = BitmapFilterQuality.HIGH;
    gradientGlow.type = BitmapFilterType.OUTER;

    panel.filters = [gradientGlow];

    this.rawChildren.addChild(panel);
    pages.push(panel);

    panel.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){onClickHandler(e,title,chld)});
    this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)});  
}
public function onClickHandler(e:MouseEvent,title:String,chld:Object):void {
    for each(var stp1:NewPanel in pages){
        if(stp1.title==title){
            var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
            eventObj.panelClicked = stp1;
            dispatchEvent(eventObj); 
        }
    }
}
private function onCustomPanelClicked(e:CustomPageClickEvent,title:String):void {

    Alert.show("onCustomPanelClicked" + title);
    var panel:NewPanel;
    for each(var stp:NewPanel in pages){
        startAnimation(e,stp);
    }
    if(title == e.panelClicked.title){
        panel = new NewPanel(null);
        panel.title = title;
        panel.name=title;
        panel.width = 150;
        panel.height = 80;
        panel.x=100;
        panel.y=40;
        this.rawChildren.addChild(panel);

        var slideRight:SlideRight = new SlideRight();
        slideRight.target=panel;
        slideRight.duration=750;
        slideRight.showTarget=true;
        slideRight.play();

        var jsonData = this.map.getValue(title);
        var posX:Number = 50;
        var posY:Number = 175;
        for each ( var pnl:NewPanel in pages){
            pages.pop();
        }
        for each ( var stp1:Object in jsonData.children){
            panel = new NewPanel(null);
            panel.title = stp1.text;
            panel.name=stp1.id;
            panel.width = 100;
            panel.id=stp1.id;
            panel.height = 80;
            panel.x = posX;
            panel.y=posY;
            posX += 150;

            var s:String="hi" + stp1.text;
            panel.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){onChildClick(e,s);});
            this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPnlClicked(e)});

            this.rawChildren.addChild(panel);
            pages.push(panel);
            this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)}); 
            var slide:SlideUp = new SlideUp();
            slide.target=panel;
            slide.duration=1500;
            slide.showTarget=false;
            slide.play();
        }       
    }
}
public function onChildClick(e:MouseEvent,s:String):void {
    for each(var stp1:NewPanel in pages){
        if(stp1.title==e.currentTarget.title){
            var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
            eventObj.panelClicked = stp1;
            dispatchEvent(eventObj); 
        }
    } 
}      
private function onCustomPnlClicked(e:CustomPageClickEvent):void {
    for each ( var pnl:NewPanel in pages){
        pages.pop();
    }
}   
private function fadePanel(event:Event,panel:NewPanel):void{
    panel.alpha -= .005;
    if (panel.alpha <= 0){
        panel.removeEventListener(Event.ENTER_FRAME, 
        function(e:Event){fadePanel(e,panel);});
    };
    panel.title=""; 
}

private function startAnimation(event:CustomPageClickEvent,panel:NewPanel):void{
    panel.addEventListener(Event.ENTER_FRAME, 
    function(e:Event){fadePanel(e,panel)});
}
...