2009年3月27日 星期五

載入外部swf當作Asset Library

如果在開發Flash專案,有部份asset可能需要動態更新
由設計人員進行維護,可以將asset存放在獨立的swf內
透過載入外部swf到主程式內操作使用
這部份可應用在需要做介面更換的程式或遊戲開發

1.載入外部swf檔案
這個要當作Asset Lib的swf擋,stage上可以不要放物件
lib內要被當作asset使用的物件,都要設定其linkage
linkage名稱就會被當作被Class名稱而被其他程式引用
2.載入完成後,透過取物件的applicationDomain屬性來取得
ApplicationDomain物件
3.利用ApplicationDomain物件的getDefinition()來取得所要的class
4.注意:當要實體化取得的class時,實體的類別還是要宣告為MovieClip
才不會出錯

var myLoader:Loader= new Loader();
var myUrlReq:URLRequest= new URLRequest(_path);
myLoader.load(myUrlReq); 
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); 

function onLoaded(event:Event):void{ 
    var appDomain:ApplicationDomain = event.target.applicationDomain;
    var myClass:Class = Class(appDomain.getDefinition(_name));
    var myInstance:MovieClip=new myClass();
    addChild(myInstance)
}


相關連結

如何取得動態換行文字高度

對於動態載入外部文字的TextField,
使用autoSize讓TextFild可設定寬度自動換行
但無法抓到正確的文字高度

1.先以autoSize設定讓他可自動換行後
2.再設定允許要使用的寬度
這時文字已經依照你的設定的寬度,自動換行排列
3.關掉autoSize
4.這時你可以取得文字框的高度
myText.autoSize = TextFieldAutoSize.LEFT;
myText.width =300;
myText.autoSize = TextFieldAutoSize.NONE;
trace(myText.textHeight)

2009年3月9日 星期一

讓兩個Sprite同時接收到MouseEvent

如何讓疊合的兩個mc同時都可以
接收到mouse的event

情境:
1.有一個bg_mc,上面有ㄧ個star_mc
2.在bg_mc上設定Roll_Over與Roll_Out event監聽
3.當滑鼠在bg_mc上會觸發Roll_Over事件
但當滑鼠移動到star_mc上,則bg_mc的Roll_Out事件會被觸發

如何讓滑鼠在star_mc上,而Roll_Out不會被觸發
做法:
1.產生一個mcContainer,把bg_mc與star_mc都加到
mcContainer內
2.Roll_Over與Roll_Out設定到 mcContainer上
mcContainer.addEventListener(MouseEvent.ROLL_OUT,XXX);
mcContainer.addEventListener(MouseEvent.ROLL_OVER,XXX);
mcContainer.mouseChildren=true;
即可