阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

多媒体交互应用基础(6)

Posted on 2012-02-17 19:54  阳光VIP  阅读(135)  评论(0编辑  收藏  举报

问题一:如何删除对象?

 

删除对象的方法有很多,我们先一步步来做一些简单操作。

在场景里面有一个按钮,我们点击按钮,然后删除一个mc

 

步骤:

在场景放了一个button,名为Btn

创建一个mc对象,并加入显示列表

 

  1. package 
  2. {
  3.     import flash.display.MovieClip;
  4.     import flash.events.*;
  5.     import flash.display.SimpleButton;
  6.     public class Example4 extends MovieClip
  7.     {   
  8.        private var  mymc:mc;
  9.         public function Example4()
  10.         { init();
  11.           Btn.addEventListener(MouseEvent.CLICK,onClick);   
  12.         }
  13.         
  14.         private function init():void
  15.         {
  16.            mymc=new mc();
  17.            addChild(mymc);
  18.            mymc.x=250;
  19.            mymc.y=200;
  20.         }
  21.                 
  22.         private function onClick(e:MouseEvent):void
  23.         {
  24.             removeChild(mymc);//删除mc对象
  25.         }
  26.         
  27.         
  28.         
  29.     }
  30. }

很简单,使用removeChild 可以删除mc的对象,但是当我们再次点按钮的时候我们可以发现这样的代码会出现一些错误

ArgumentError: Error #2025: 提供的 DisplayObject 必须是调用者的子级。
 at flash.display::DisplayObjectContainer/removeChild()
 at Example4/::onClick()

 

问题原因在于我们已经删除了对象,所以调用删除对象的时候,对象已经不存在

为了避免这个问题,我们需要修改一下代码

  1. private function onClick(e:MouseEvent):void
  2.         {   if(mymc!=null)
  3.             {removeChild(mymc);
  4.             mymc=null;
  5.             }
  6.         }

判断他是否为null,这样即使再次点击按钮也不会出错,当删除完的时候,对象其实还是留在内存里面,所以我们将null赋值给它这样就可以完成一些简单的删除

问题二:如何删除多个对象?

按上面的方法,我们知道可以使用removeChild方法来删除对象,来看看如何删除多个对象?

看看下面的结果如何?

 

  1. package 
  2. {
  3.     import flash.display.MovieClip;
  4.     import flash.events.*;
  5.     import flash.display.SimpleButton;
  6.     public class Example4 extends MovieClip
  7.     {
  8.         private var mymc:mc;
  9.         public function Example4()
  10.         {
  11.             init();
  12.             Btn.addEventListener(MouseEvent.CLICK,onClick);
  13.         }
  14.         private function init():void
  15.         {
  16.             for (var i:int=0; i<5; i++)
  17.             {
  18.                 mymc=new mc();
  19.                 addChild(mymc);
  20.                 mymc.x=50+i*mymc.width;
  21.                 mymc.y=200;
  22.             }
  23.         }
  24.         private function onClick(e:MouseEvent):void
  25.         {
  26.             if (mymc!=null)
  27.             {
  28.                 removeChild(mymc);
  29.                 mymc=null;
  30.             }
  31.         }
  32.     }
  33. }

很显然如果你运行这样的代码 只是会删除一个对象,尝试一下改变它的结果如何每按一按钮就能一个接一个的删除呢?

 

注意 这段代码是有问题的。看能不能自己解决呢?