2011-10-14 64 views
0

我需要在我的CustomClass中使用stage.width/height,所以我找到了一些關於它的主題。自定義類中的舞臺屬性,不是文檔類

if (stage) 
      { 
       init(ar,firma,kontakt,oferta,naglowek,tekst,dane); 
      } 
      else 
      { 
       addEventListener(Event.ADDED_TO_STAGE, init); 
      } 

但在我的情況下,它不會工作,因爲它不是文檔類,我認爲。其他解決方案?

UPDATE: 類代碼

package 
{ 
    import fl.transitions.Tween; 
    import fl.motion.easing.*; 
    import flash.filters.*; 
    import flash.events.MouseEvent; 
    import flash.display.Stage; 
    import flash.display.MovieClip; 
    import flash.ui.Mouse; 
    import flash.display.*; 
    public class Wyjazd extends MovieClip 
    { 
     public function Wyjazd(ar:Array=null,firma:Object=null,kontakt:Object=null,oferta:Object=null,naglowek:Object=null,tekst:Object=null,dane:Object=null) 
     { 
      if (stage) 
      { 
       //The stage reference is present, so we're already added to the stage 
       init(ar,firma,kontakt,oferta,naglowek,tekst,dane); 
      } 
      else 
      { 
       addEventListener(Event.ADDED_TO_STAGE, init); 
      } 


     } 

     public function init(ar:Array,firma:Object=null,kontakt=null,oferta:Object=null,naglowek:Object=null,tekst:Object=null,dane:Object=null):void 
     { 

      //Zmienne "globalne" dla funkcji 
      var time:Number; 
      var wciecie:Number; 
      var wciecie2:Number; 
      var offset:Number = 15.65; 
      var offset2:Number = 20; 
      var posX:Array = new Array(12); 
      var posY:Array = new Array(12); 
      var spr:Array = new Array(12); 
      var targetLabel:String; 
      var wybranyOb:Object = ar[0]; 
      var names:Array = new Array('Szkolenie wstępne BHP','Szkolenie okresowe BHP','Szkolenie P.Poż','Kompleksowa obsługa P.Poż','Pomiar środowiska pracy','Szkolenie z udzielania pierwszej pomocy','Ocena ryzyka zawodowego','Przeprowadzanie postępowań po wypadkowych','Przeprowadzanie audytów wewnętrznych ISO','Hałas w środowisku komunalnym','Medycyna pracy','Szkolenia dla kierowców'); 
      //Pobieranie pozycji 
      for (var i:Number = 0; i<ar.length; i++) 
      { 
       posX[i] = ar[i].x; 
       posY[i] = ar[i].y; 

      } 



      //Filtry 
      function increaseBlur(e:MouseEvent,docPos:Number):void 
      { 
       var myBlur:BlurFilter =new BlurFilter(); 
       myBlur.quality = 3; 
       myBlur.blurX = 10; 
       myBlur.blurY = 0; 
      } 
      //Funkcje 
      function startPos():void 
      { 
       time = 0.2; 
       for (var i:Number = 0; i<ar.length; i++) 
       { 
        //if (wybranyOb.name == ar[i].name) 
        //{ 
        //var wybranyPos:Tween = new Tween(ar[i],"x",Linear.easeOut,ar[i].x,posX[i],0.01,true); 
        //wybranyPos = new Tween(ar[i],"y",Linear.easeOut,-30,posY[i],time,true); 
        //} 
        //else 
        //{ 
        var position:Tween = new Tween(ar[i],"x",Linear.easeOut,ar[i].x,posX[i],time,true); 
        position = new Tween(ar[i],"y",Linear.easeOut,ar[i].y,posY[i],time,true); 
        //} 
        //time = 0.2; 
       } 
       position = new Tween(naglowek,"x",Linear.easeOut,naglowek.x,2000,time,true); 
       position = new Tween(tekst,"x",Linear.easeOut,tekst.x,2000,time,true); 
       position = new Tween(dane,"x",Linear.easeOut,dane.x,2000,0.25,true); 
      } 

      //Nasłuchy 
      oferta.addEventListener(MouseEvent.CLICK, wyskokOferta); 
      oferta.addEventListener(MouseEvent.MOUSE_OVER,glowOferta); 
      oferta.addEventListener(MouseEvent.MOUSE_OUT,unglowOferta); 
      kontakt.addEventListener(MouseEvent.CLICK,wyskokKontakt); 
      kontakt.addEventListener(MouseEvent.MOUSE_OVER,glowKontakt); 
      kontakt.addEventListener(MouseEvent.MOUSE_OUT,unglowKontakt); 
      firma.addEventListener(MouseEvent.CLICK,wyskokFirma); 
      firma.addEventListener(MouseEvent.MOUSE_OVER,glowFirma); 
      firma.addEventListener(MouseEvent.MOUSE_OUT,unglowFirma); 
      function glowFirma(e:MouseEvent):void 
      { 
       var myGlow:GlowFilter=new GlowFilter(); 
       myGlow.color = 0xe6da13; 
       myGlow.inner = true; 
       firma.filters = [myGlow]; 
      } 
      function unglowFirma(e:MouseEvent):void 
      { 
       firma.filters = []; 
      } 
      function glowKontakt(e:MouseEvent):void 
      { 
       var myGlow:GlowFilter=new GlowFilter(); 
       myGlow.color = 0xe6da13; 
       myGlow.inner = true; 
       kontakt.filters = [myGlow]; 
      } 
      function unglowKontakt(e:MouseEvent):void 
      { 
       kontakt.filters = []; 
      } 
      function glowOferta(e:MouseEvent):void 
      { 
       var myGlow:GlowFilter=new GlowFilter(); 
       myGlow.color = 0xe6da13; 
       myGlow.inner = true; 
       oferta.filters = [myGlow]; 
      } 
      function unglowOferta(e:MouseEvent):void 
      { 
       oferta.filters = []; 
      } 
      function wyskokKontakt(e:MouseEvent):void 
      { 
       startPos(); 
       var tweenKontakt = new Tween(dane,"x",Linear.easeOut,2000,350,0.25,true); 

      } 
      function wyskokFirma(e:MouseEvent):void 
      { 
       startPos(); 
       trace("Firma"); 
      } 
      function wyskokOferta(e:MouseEvent):void 
      { 

       time = 0.2; 
       wciecie = 15.65; 
       wciecie2 = 20.05; 
       for (var i:Number = 0; i < ar.length; i++) 
       { 

        var tween:Tween = new Tween(ar[i],"x",Sine.easeOut,ar[i].x,oferta.x + wciecie,time,true); 
        tween = new Tween(ar[i],"y",Sine.easeOut,ar[i].y,oferta.y + wciecie2,time,true); 

        ar[i].addEventListener(MouseEvent.CLICK,onClick); 
        spr[i] = i; 

        time += 0.02; 
        wciecie += offset; 
        wciecie2 += offset2; 
       } 
      } 

      function onClick(e:MouseEvent) 
      { 
       startPos(); 
       time = 0.2; 
       var k:Number = 0; 
       targetLabel = e.currentTarget.name; 

       for (var i:Number = 0; i < ar.length; i++) 
       { 
        if (targetLabel==ar[i].name) 
        { 
         //wybranyOb = ar[i]; 
         var tween:Tween = new Tween(ar[i],"x",Linear.easeOut,ar[i].x,posX[i],time,true); 
         tween = new Tween(ar[i],"y",Linear.easeOut,ar[i].y,posY[i],time,true); 
         tween = new Tween(naglowek,"x",Linear.easeOut,2000,60,0.2,true); 
         tween = new Tween(tekst,"x",Linear.easeOut,2000,500,0.25,true); 
         naglowek.text = names[i]; 


        } 
        else 
        { 
         var tween1:Tween = new Tween(ar[i],"x",Linear.easeOut,ar[i].x,posX[i],time,true); 
         tween1 = new Tween(ar[i],"y",Linear.easeOut,ar[i].y,posY[i],time,true); 
        } 
        //time += 0.02; 
       } 

      } 


     } 

    } 
} 

希望這將有助於。

+0

你的類是否擴展DisplayObject,它應該在顯示列表中?你是否在顯示列表中控制文檔類或任何DisplayObject,或者它是純邏輯/不可見組件的一部分? – www0z0k

+0

我的課程擴展了MovieClip,它在顯示列表中。我控制一些按鈕。 –

+0

是你的初始函數採取...休息作爲它的參數?否則,它只需要一個Event類參數,例如:function init(e:Event):void – Hawks

回答

2

我希望你從init函數中得到一個錯誤,它需要很多參數,但可能只是得到一個事件。如果您發佈了與源代碼相關的編譯或運行時錯誤,則在此處發佈時會有所幫助。

我認爲這應該爲你工作,我做了一個粗略的版本,你可以從學習和運用到自己的類

public class CustomClass extends MovieClip 
{ 

protected var _company:String; 
protected var _data:Object; 

public function CustomClass(company:String='', data:Object=null) 
{ 
    _company = company; 
    _data = data; 
    if (stage) 
    { 
     init(); 
    } 
    else 
    { 
     addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

public function init(e:Event=null):void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE, init); 
    //do something with _data 
    //do something with _company 
} 

} 

希望你可以在這裏看到的理念,把你的構造函數變量當你創建類的時候,如果在舞臺上調用使用這些類變量的init()或者添加一個將調用init的事件監聽器(這次傳入一個事件),然後使用相同的類變量來做你想。

注意當我不再需要事件偵聽器時,我該如何刪除事件偵聽器。

+0

我得到了「錯誤1120:訪問未定義的屬性事件」。指向addEventListener(Event.ADDED_TO_STAGE,init); –

+0

確定該錯誤意味着您尚未導入類Event。所以只需添加import flash.events.Event;與您的其餘進口。 – Hawks

+0

是的,我明白了......非常感謝:) –