甘肃快三500期走势|甘肃快三近200期走势图
 
文章搜索:
打開支付寶首頁搜索“510617664”,即可領紅包
  首頁--> 計算機--> 網頁設計
 
動態復制MC時不要忘記initObject參數
http://www.rusoi.tw 學習輕松網 點擊量:14974
 
在論壇上看到一個HTML里的FLASH圖片切換效果,JS跟FLASH通信,本來覺得沒啥特別的,不過仔細看了下發現里面有行代碼比較“怪異”,在使用duplicateMovieClip復制MC時,它傳遞了三個參數:MC新名稱、深度、Object類型的一個變量。頓時奇怪了,這個Object有什么作用了?查了下幫助手冊,才發現,一直以來自己居然忽視了這么好一個東東,呵呵,太慚愧了。下面就來說說這個object到底能干些啥了!

這是文檔里對duplicateMovieClip方法的說明:
public duplicateMovieClip (name:String, depth:Number, [initObject:Object]) : MovieClip

參數
name:String - 已重制的影片剪輯的唯一標識符。

depth:
Number - 一個唯一整數,指定要放置新影片剪輯的深度。使用深度 -16384 可將新影片剪輯實例放置在創作環境中創建的所有內容之下。介于 -16383 和 -1(含)之間的值是保留供創作環境使用的,不應與此方法一起使用。其余的有效深度值介于 0 和 1048575(含)之間。

initObject:
Object [可選] - (Flash Player 6 和更高版本支持。)包含用于填充復制影片剪輯的屬性的對象。此參數使動態創建的影片剪輯能夠接收剪輯參數。如果 initObject 不是對象,則忽略它。initObject 的所有屬性都已復制到新實例中。使用 initObject 指定的屬性對于構造函數是可用的。
正是因為intiObject參數可選,我才忽視了這個參數的作用,我想肯定也有朋友跟我一樣,這也是我寫這篇文章的目的,呵呵 給某些朋友也提個醒。

從參數說明中可以看出,我們使用initObject參數可以在MC復制時初始化MC的屬性,這里的屬性可以理解為兩方面:

第一、它是MovieClip類的屬性,例如,_x _y _alpha等等我們經常使用的屬性。

第二、不是MC固有的屬性,而是一個自定義的變量,例如自定義一個link變量。

在沒有使用initObject參數前,我完成MC復制以后還需要一個with來初始化MC的屬性,例如:
for( i=0;i<5;i++){
_mc.duplicateMovieClip("_mc"+i,i);
var _mc = eval("_mc"+i);
with (_mc){
  _x=120*i;
}
}

我們還會遇到一個很常見的問題,例如,我要給每個復制出來的MC初始化一個link,當MC點擊時,我要trace出這個link,需求很簡單,我們可以嘗試寫如下代碼:
for (i=0; i<5; i++) {
_mc.duplicateMovieClip("_mc"+i, i);
var _mc = eval("_mc"+i);
//_mc里設置一個_txt文本,用來記錄i,假設link等于i
_mc._txt.text = i;   
_mc._x = 120*i;
//為每個MC賦予按鈕事件,讓它能夠trace出指定的link
_mc.onRelease = function() {
  trace(i);
};
}

測試我們發現,復制出來的5個MC的文本顯示的確實是0到4,不過當我們點擊的時候我們會發現trace出來的都是5,奇怪了,為何我們看到的link是0到4,而我們trace出來的為何是5了?如果對程序內存分配稍微有些了解的話這個就很好理解了,在FLASH里,對于5個MC,我們trace的link變量是占用同一個內存地址。那么如何解決這個問題了?我之前的做法是在復制MC時就給MC一個變量,用來記錄link。
for (i=0; i<5; i++) {
_mc.duplicateMovieClip("_mc"+i, i);
var _mc = eval("_mc"+i);
_mc._txt.text = i;
_mc._x = 120*i;
_mc.link=i;
_mc.onRelease = function() {
  trace(this.link);
};
}

測試,達到我們預期的效果。
現在如果使用initObject參數,那么上面的問題就可以很容易解決了,同時精簡了代碼量。
for (i=0; i<5; i++) {
var _obj={link:i,_x:120*i,num:i};
_mc.duplicateMovieClip(”_mc”+i, i,_obj);
var _mc = eval(”_mc”+i);
_mc._txt.text = _mc.num;
_mc.onRelease = function() {
  trace(this.link);
};
}

我們定義了一個名為_obj的Object類型變量,它傳遞了三個變量,link, _x ,num,其中_x是MC固有屬性,那么MC復制出來以后_x坐標自動初始化,不需要我們去設置,對于link , num兩個變量相當于我們給每個復制出來的MC都分配了獨立的內存空間來存儲這兩個變量,任何時候我們都可以使用_mc.link來訪問這個變量值,而不會出現之前我們遇到的共用內存地址所造成的麻煩了。
再查閱一下attachMovie方法,它也有一個initObject參數,方式使用和duplicateMovieClip的一樣。因此在我們動態復制MC時,如果好好利用這個參數,那么是可以讓我們的復制更簡潔,更方便。

如有疏漏之處,歡迎指出交流...(*^__^*)

來源:閃吧  作者:llkings  


打印】 【關閉
免責聲明 :本站刊載此文不代表同意其說法或描述,僅為提供更多信息,也不構成任何建議。對本文有任何異議,請發送[email protected]
最熱門點擊排行
關鍵字推廣>>
版權所有 2006-2020:學習輕松網 Copyright http://www.rusoi.tw All rights reserved 浙ICP備1401370號
廣告聯系電話: 13958357030 聯系QQ:9792414 工具條下載
甘肃快三500期走势 股票配资平台推荐找恒瑞行配资负责 开元游戏棋牌官方网站 房地产股票融资 斗地主棋牌游戏 添盈聚富 百赢棋牌下载 鑫鑫配资 老k游戏大厅官方下载 同化配资 最新娱乐电玩游戏888