2010年12月8日 星期三

[AS3] DisplayObjectContainer.addChild()方法、removeChild()方法

addChild(child:DisplayObject):DisplayObject
將 DisplayObject 子實體加入至此 DisplayObjectContainer 實體。
removeChild(child:DisplayObject):DisplayObject
將指定的 child DisplayObject 實體從 DisplayObjectContainer 實體的子清單中移除。


Sprite類別實體aaa使用graphics屬性繪製了三角形,並加入顯示清單而為Sprite類別實體container的子物件。以 Switch_btn 切換呼叫 addChild() 和 removeChid(),將aaa 加入和移除。



991208_DisplayObjectContainer.addChild、removeChild_2.fla


import flash.display.Sprite;
//
var container:Sprite = new Sprite();
addChild(container);
//
var flag:Boolean = true;
var aaa:Sprite = new Sprite();
aaa.graphics.lineStyle(10, 0xFF2255, 1, false, LineScaleMode.VERTICAL, CapsStyle.NONE, JointStyle.MITER, 10);
aaa.graphics.beginFill(0xffaa00);
aaa.graphics.moveTo(50, 50);
aaa.graphics.lineTo(520, 160);
aaa.graphics.lineTo(320, 300);
aaa.graphics.lineTo(50, 50);
aaa.graphics.endFill();
container.addChild(aaa);
//
switch_btn.buttonMode = true;
switch_btn.addEventListener(MouseEvent.CLICK, removeSprite);
function removeSprite(e:MouseEvent):void{
 if (flag){
  container.removeChild(aaa);
  flag = false;
 }else{
  container.addChild(aaa);
  flag = true;
 }
 //remove_btn.removeEventListener(MouseEvent.CLICK, removeSprite);
}




試著將切換用的按鈕switch_btn當作內嵌資源類別來使用,從舞台上刪除,並從元件庫來做設定,為SwitchBtn類別
switch_btn的label文字也配合切換,以TextField類別實體來做動態處理



991208_DisplayObjectContainer.addChild、removeChild_3.fla


import flash.display.Sprite;
import flash.text.TextField;
import flash.display.MovieClip;
import flash.text.TextFormat;

//建構TextFormat類別實體指定給myTextFormat,設定myTextFormat的屬性值
var myTextFormat:TextFormat = new TextFormat();
with(myTextFormat){
 color = 0x000066;
 size = 16;
 font = "Lucida Fax";
 bold = true;
}

//建構TextField類別實體指定給labelTf
var labelTf:TextField = new TextField();
//設定labelTf的各屬性值
with(labelTf){
 x = -50;
 y = -10;
 width = 100;
 autoSize = TextFieldAutoSize.CENTER;
 //multiline = true;
 //wordWrap = true;
 defaultTextFormat = myTextFormat;
 text = "removeChild";
}

//建構Sprite類別實體指定給container,做為aaa的容器物件,附加到主時間軸上
var container:Sprite = new Sprite();
addChild(container);

//建構内建資源類別SwitchBtn類別的實體,並指定給MovieClip資料型別的Switch_btn
//内建資源類別SwitchBtn類別的基底類別為MovieClip類別
var switch_btn:MovieClip = new SwitchBtn();
addChild(switch_btn);
switch_btn.x = 129;
switch_btn.y = 296;
//開啟switch_btn的buttonMode屬性,使有按鈕滑入滑出按壓互動與出現掌形指標
switch_btn.buttonMode = true;
//mouseChildren - 判斷物件的子系是否支援啟用滑鼠或使用者輸入裝置。
//如果啟用某個物件,則使用者可以使用滑鼠或使用者輸入裝置,與其進行互動。
//預設值為 true。
switch_btn.mouseChildren = false;
//將labelTf加入switch_btn為子實體
switch_btn.addChild(labelTf);

//建構Sprite類別實體指定給aaa;指定aaa各屬性值
var aaa:Sprite = new Sprite();
with(aaa.graphics){
 //graphics類別繪圖
 lineStyle(10, 0xFF22ff, 1, false, LineScaleMode.VERTICAL, CapsStyle.NONE, JointStyle.MITER, 10);
 beginFill(0xffff55);
 moveTo(50, 50);
 lineTo(520, 160);
 lineTo(320, 300);
 lineTo(50, 50);
 endFill();
}
//將aaa加入container為子實體
container.addChild(aaa);

//宣告flag布林變數,初始值為true,做為switch_btn切換作用之判斷
var flag:Boolean = true;
//switch_btn廣播MouseEvent.CLICK事件給removeSprite偵聽
switch_btn.addEventListener(MouseEvent.CLICK, removeSprite);
//
function removeSprite(e:MouseEvent):void{
 if (flag){
  container.removeChild(aaa);
  flag = false;
  labelTf.text = "addChild";
 }else{
  container.addChild(aaa);
  flag = true;
  labelTf.text = "removeChild";
 }
 //remove_btn.removeEventListener(MouseEvent.CLICK, removeSprite);
}


適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.display.DisplayObjectContainer
適用於 Adobe  Flash  Professional CS5 的 ActionScript  3.0 參考__●flash.display.Graphics
適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.display.Graphics__lineStyle()方法

沒有留言: