2010-11-19 4 views
0

Özel bir uicomponent oluşturdum ve tarayıcı veya belirli bir konteyneri yeniden boyutlandırıldığında, bir yeniden boya oluşuyor, ancak bileşenin içeriği yeniden ve tekrar tekrar çiziliyor ... Öyleyse, eğer konteynırı hareket ettirirsek, birbirinin üzerine çizilen birden fazla daireyle bitireceğim ama yeniden boyamanın meydana geldiği yerde konteynerin nerede olduğuna bağlı olarak ofset yapacağım. GüncellemeTanışmanızList kodu aşağıda. Bir tür net yapmam gerekiyor, böylece bu şekilde sürekli çoğaltılmıyor. Yardımlarınız için çok teşekkürler!Özel Flex/ActionScript UIComponent Yeniden Boyutlandırma Sırasında Birden Çok Kez Boyanmaya Devam Ediyor

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { 

      super.updateDisplayList(unscaledWidth, unscaledHeight);        

      trace("height: " + parent.height); 
      trace("width: " + parent.width); 

      if (parent.height <= parent.width) { 
       radius = Math.round((parent.height*.95)/2); 
      } 
      else { 
       radius = Math.round((parent.width*.95)/2); 
      } 

      trace("radius: " + radius); 

      outterRadius = Math.round(radius*.70); 
      innerRadius = Math.round(radius*.30); 

      trace("outterradius: " + outterRadius); 
      trace("innerradius: " + innerRadius); 

      centerX = this.width/2; 
      centerY = this.height/2; 

      trace("centerX: " + centerX); 
      trace("centerY: " + centerY); 

      var innerCircle:Sprite = new Sprite(); 
      var outterCircle:Sprite = new Sprite(); 
      var baseCircle:Sprite = new Sprite(); 

      baseCircle.graphics.beginFill(0x000000); 
      baseCircle.graphics.drawCircle(centerX, centerY, radius);    

      outterCircle.graphics.lineStyle(2, 0xA10303, .75); 
      outterCircle.graphics.drawCircle(centerX, centerY, outterRadius); 


      innerCircle.graphics.lineStyle(2, 0xA10303, .75); 
      innerCircle.graphics.drawCircle(centerX, centerY, innerRadius); 

      addChild(baseCircle); 
      addChild(outterCircle); 
      addChild(innerCircle); 

      for (var bubbleCount:int=0; bubbleCount < bubbleList.length; bubbleCount++) { 
       var globalPoint:Point = this.localToGlobal(getPointInCircle(radius)); 
       var radarBubble:RadarBubble = bubbleList.getItemAt(bubbleCount) as RadarBubble; 
       var bubbleLocalPoint:Point = radarBubble.globalToLocal(globalPoint); 
       radarBubble.x = bubbleLocalPoint.x; 
       radarBubble.y = bubbleLocalPoint.y; 
       trace("Add bubble: " + radarBubble.x + ", " + radarBubble.y + ", " + radarBubble.radius); 
       addChild(radarBubble);          
      }       

      // create radar display lines to be animated 
      for (var angleCount:int=0; angleCount < 360; angleCount++) { 
       var tmpLine3:Sprite = new Sprite(); 
       tmpLine3.graphics.lineStyle(2, 0xA10303, 1); 
       tmpLine3.graphics.moveTo(centerX, centerY);           
       tmpLine3.graphics.lineTo(getEndpoint(angleCount).x, getEndpoint(angleCount).y); 
       tmpLine3.visible = false; 
       addChild(tmpLine3); 
       lineCollection.addItemAt(tmpLine3, angleCount);        
      } 

     } 

cevap

1

Flex component lifecycle adresinden okuyun. Birçok şey invalidateDisplayList() öğesini çalıştırabilir ve böylece bir sonraki render olayı sırasında updateDisplayList uygulamasının yeniden çalıştırılmasına neden olabilir.

Burada gördüğüm sorun, her defasında yeni baseCircle, outerCircle ve innerCircle oluşturuyor olmanızdır. Aksine, her bir örnekten birini oluşturmalı ve updateDisplayList() işlevi çalıştığında güncellemelisiniz.

Geçerli bileşen üzerinde muhtemelen İç Devre, Dış Devre ve Baz Değişkenleri örneklerinizi yapabilmekteyim. CreateChildren() 'da bunları bileşen üzerinde çocuk olarak ekleyebilirsiniz. UpdateDisplayList'te ilgili çizimi yapabilirsiniz.

+0

+1 İyi yanıt. Bana bunu yendin;) –

+0

Teşekkürler Guys - Daha fazla bilgi edinmek için updateDisplayList() ve createChildren() öğelerini daha iyi anlayacağım. Size nasıl çıktığımı bilmenizi sağlayacağım. Çocuklar için dairelere ihtiyacım olduğunu düşünmüyorum, sadece bunları updateDisplayList() 'de çizebilirim. Ancak, eklediğim diğer çocukların da Sprites'in ayrı olması gerekiyor ... – fortpointuiguy

+0

Flextras and Wade - addChildren() 'da addChildren()' da canlandırılması gereken satırlarımı eklediğimde, satırlar asla görüntülenmiyor. Başlangıçta görünür olarak ayarlandılar = false b/c Satırda canlandırmak için her seferinde yalnızca bir satır görüntüleyen bir zamanlayıcım var. Düşüncesi olan var mı? – fortpointuiguy

İlgili konular