天天看點

ActionScript 3.0 cookbook詳細解析

   ActionScript 3.0 Cookbook 6.2 從顯示清單中移除項目:

  ActionScript 3.0 cookbook是進行Flash、Flex以及AIR開發所必需的技術。存儲null6.2 從顯示清單中移除項目問題:

  你要想從顯示清單移除項目進而從螢幕中移除

  解決方案:

  使用DisplayObjectContainer 類的removeChild()和removeChildAt()方法

  讨論:

  6.1節中已經陳述了如何用addChild()和addChildAt()方法去在顯示清單中增加顯示對象

  達到相反的效果可以用removeChild()和removeChild()方法。

  removeChild()方法接收唯一的參數,這個參數就是要從容器對象中要被删除的子對象,

  如果假設被删除的對象不是一個容器的子對象,那麼将會抛出一個參數異常

  package{

  import flash.display.Sprite;

  import flash.text.TextField;

  import flash.events.MouseEvent;

  public class RemoveChildExample extends Sprite {

  //建立一個本地變量用于存儲稍後将被移除的Textfield

  private var _label:TextField;

  public function RemoveChildExample( ) {

  _label = new TextField( );

  _label.text = "Some Text";

  // 把Textfield對象加入顯示對象清單

  addChild( _label );

  //當滑鼠點選舞台的任意位置時标簽label被移除

  stage.addEventListener( MouseEvent.CLICK, removeLabel );

  }

  // 從顯示對象清單中移除該标簽對象

  public function removeLabel( event:MouseEvent ):void {

  removeChild( _label );

  在上面的代碼例子中建立一個本地變量label來存儲将要被removeChild()删除的對象TextField

  如果你不用label存儲被删除對象,也可以用removeChildAt()方法代替

  removeChildAt()方法的參數也是一個,不過它是容器顯示清單孩子對象的索引值。

  範圍0到numChildren 1. 如果無效的索引(如負數值,或者大于容器子節點數目的值)被指定

  那麼将抛出異常,将上面的代碼用removeChildAt() 方法實作代碼如下:

  package {

  public class DisplayListExample extends Sprite {

  public function DisplayListExample( ) {

  var label:TextField = new TextField( );

  label.text = "Some Text";

  // 把label加入顯示對象清單中

  addChild( label );

  // 從容器對象清單中移除所有子對象

  // 如果子對象存在則移除

  if ( numChildren > 0 ) {

  removeChildAt( 0 );

  注意:移除子對象并不是完全删除該子對象,而是阻止其顯示,如果要完全的删除該對象,要将該對象指派為null

  如果你想删除一個容器的所有的子對象,可以用removeChildAt()和一個循環一起來實作

  每一個容器都有一個numChildren屬性,這個屬性指出該對象有多少個子對象的數目

  無論什麼時間從子對象清單中移除某一個子象,其他的沒有被移除的子對象中位置比它高的都會移動一個位

  來屏蔽空隙。比如清單中有三個子對象,分别對應清單中的0,1,2位置,如果0位置的子對象被删除,那麼

  1位置的子對象會移動到0位置,2位置的的子對象會移動到1位置。

  我們推薦使用的第一種方法,是用ascb.util.DisplayObjectUtilities 類

  package ascb.util {

  import flash.display.*;

  public class DisplayObjectUtilities {

  // 移除一個容器中所有子對象

  public static function removeAllChildren(

  container:DisplayObjectContainer ):void {

  // 每次移除一個子對象numChildren都會改變

  var count:int = container.numChildren;

  //通過循環移除子對象

  for ( var i:int = 0; i < count; i++ ) {

  container.removeChildAt( 0 );

  第二中方法,使用DisplayObjectUtilities.removeAllChildren( ) 方法:

  import ascb.util.DisplayObjectUtilities;

  //增加空的sprite對象

  addChild( new Sprite( ) );

  // 從這個容器中移除所有的對象

  DisplayObjectUtilities.removeAllChildren( this );

  // 所有的子對象被移除後該值顯示為0

  trace( numChildren );

繼續閱讀