tag:blogger.com,1999:blog-59465307047421309702024-03-06T16:20:07.273+08:00Jax 的工作紀錄除了在整理學習上的經驗,同時也能幫助其他需要的人Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-5946530704742130970.post-1590276089077934932010-11-01T05:10:00.002+08:002013-06-10T23:18:34.607+08:00[ActionScript] loadMovieClip原生的 loadMovie 少了 onComplete 的追蹤,而 MovieClipLoader 使用起來又太囉唆,索性就對 MovieClip 的 prototype 上加了 loadMovieClip function,至少會撰寫時快樂一點。<br />
<pre class="js" name="code">MovieClip.prototype.loadMovieClip = function(src:String, onComplete:Function) :MovieClip {
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener({onLoadInit:onComplete});
mcLoader.loadClip(src,this);
return this;
};
</pre><br />
<br />
使用方式:<br />
<pre class="js" name="code">var container:MovieClip = createEmptyMovieClip("container", this.getNextHighestDepth());
container._x = container._y = 0;
container.visible = false;
container.loadMovieClip("vodBlock.swf", function(container:MovieClip) {
trace("load complete");
container._visible = false;
});
</pre><br />
參考來源:<br />
<a target="_blank" href="http://help.adobe.com/zh_TW/AS2LCR/Flash_10.0/help.html?content=00001386.html">Flash CS4 Professional ActionScript 2.0: loadClip (MovieClipLoader.loadClip 方法) </a>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-73833419087175135372010-11-01T05:00:00.001+08:002010-11-01T05:03:24.007+08:00[ActionScript] 幾種物件撰寫方式一般撰寫的方式:雖然沒有建構物件,但別忘了場景本身就是一個物件,所以下面的撰寫方式已經再使用物件了。<br />
<pre class="js" name="code">var dataStr="jax";
var loadMc:MovieClip = createEmptyMovieClip("container", this.getNextHighestDepth());
loadMc._x = loadMc._y = 0;
loadMc.visible = false;
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip("vodBlock.swf",loadMc);
function onLoadInit(loadMc:MovieClip) {
loadMc._visible = false;
loadMc.text=this.dataStr;
}
</pre><br />
<br />
使用 JSON 的撰寫方式:如果只是單純的建立一個物件,下面這個寫法應該是最簡潔的,但這並不是一個很好 ActionScript 風格。 <br />
<pre class="js" name="code">var myObject = {
dataStr:"jax",
loadMc:null,
init:function(){
this.loadMc= createEmptyMovieClip("container", this.getNextHighestDepth());
this.loadMc._x = this.loadMc._y = 0;
this.loadMc.visible = false;
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip("vodBlock.swf",this.loadMc);
},
onLoadInit:function(loadMc:MovieClip) {
loadMc._visible = false;
loadMc.text=this.dataStr;
}
}
myObject.init();
</pre><br />
<br />
利用 Class 撰寫方式:這是 ActionScript 標準風格的撰寫方式,也比較正規一點。<br />
<pre class="js" name="code">class MyClass{
var dataStr:String;
var loadMc:MovieClip;
function MyClass(){
this.dataStr="jax"
this.loadMc= createEmptyMovieClip("container", this.getNextHighestDepth());
this.loadMc._x = container._y = 0;
this.loadMc.visible = false;
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip("vodBlock.swf",this.loadMc);
}
function onLoadInit(loadMc:MovieClip) {
loadMc._visible = false;
loadMc.text=this.dataStr;
}
}
new MyClass();
</pre><br />
<br />
延伸原生 Class 的撰寫方式:如果規劃的好這會是一個很省事的撰寫方式。<br />
<pre class="js" name="code">class MyMovieClip extends MovieClip{
var dataStr:String;
function MyMovieClip(){
this.dataStr="jax"
this._x = this._y = 0;
this.visible = false;
}
function loadMovieClip(src:String) :MovieClip {
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip(src,this);
return this;
}
function onLoadInit(mc:MovieClip) {
this = MyMovieClip(loadMc);
this._visible = false;
this.text=this.dataStr;
}
}
var loadMc:MyMovieClip = MyMovieClip( createEmptyMovieClip("container", this.getNextHighestDepth()) );
loadMc.loadMovieClip("vodBlock.swf");
</pre><br />
<br />
物件的撰寫有幾個要點:<br />
<ol><li>搞清楚 this 到底是誰?這大概也是入門時最容易被弄到翻過來的問題之一<br />
</li><li>物件的規劃,別寫了半天的『物件導向』跟寫『結構語言』沒什麼分別。</li></ol>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-64632367189426724572010-11-01T02:54:00.000+08:002013-06-10T23:19:00.888+08:00[ActionScript] Function bind由於 ActionScript 2.0 無法對 Function 做延伸,所以只好用一般函數的方式處理了。<br />
<pre class="js" name="code">function bind(func:Function, target:Object):Function{
return function(){
arguments.unshift(this);
func.apply(target, arguments);
};
};
</pre><br />
參考來源:<br />
<a target="_blank" href="http://webreflection.blogspot.com/2010/02/functionprototypebind.html">Function.prototype.bind</a><br />
<a target="_blank" href="http://efreedom.com/Question/1-843630/Can-Extend-Functions-Prototype-ActionScript">FLASH - Can I extend Function's prototype in ActionScript?</a>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-6090218398931229982010-10-22T11:17:00.001+08:002010-10-22T13:00:10.999+08:00[ActionScript] var_dump()<pre class="js" name="code">function var_dump(value){
var objRecursion=function(value,ofLine){
if(ofLine.length>5){return '';} /*最大深度*/
switch(typeof(value)){
case 'movieclip':
case 'object':
var i, outTemp=[];
for (i in value) {
outTemp.push(
ofLine+i+" => "+objRecursion(value[i], ofLine+'\t')
);
}
outTemp.push("("+typeof(value)+")");
outTemp.reverse();
return outTemp.join('\n');
default:
return value;
}
};
var output = objRecursion(value,'');
trace(output);
return output;
}
</pre>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com1tag:blogger.com,1999:blog-5946530704742130970.post-60518506968581384472010-06-01T22:11:00.000+08:002010-06-01T22:12:54.484+08:00[ActionScript] Component 動態建立與移除<pre class="js" name="code"><br />/*建立 Component*/<br />createObject("TextInput", "name_ti", getNextHighestDepth(),{<br /> _width:200,<br /> _heigh:22,<br /> _x:20,<br /> _y:30<br />});<br /><br />/*移除 Component*/<br />destroyObject("name_ti");<br /></pre>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-44707364510604199782010-05-24T09:09:00.002+08:002013-06-10T23:28:44.825+08:00[ActionScript] 嵌入 SWF 和影像檔<pre class="js" name="code">//createTextField(instanceName, depth, x, y, width, height)
this.createTextField("swf1", 10, 0, 96, 1024, 576);
swf1.html = true;
swf1.htmlText = " <img width='1024' height='576' src='my_flash.swf'/>";
</pre><br />
<br />
參考來源:<br />
<a target="_blank" href="http://livedocs.adobe.com/flash/9.0_tw/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000936.html">嵌入 SWF 和影像檔 --Flash CS3</a>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-48639399221569188162010-05-15T20:14:00.008+08:002010-05-27T00:18:23.047+08:00[ActionScript] 用 LoadVars 讀取 CSV 格式之前在寫<a href="/2010/05/actionscript-loadvars.html">用 LoadVars 讀取外部資訊</a>時就很想直接讀取 CSV 格式的文件<br />在多次查找說明文件時才發現原來 <span style="color: rgb(255, 0, 0);">onLoad </span>的事件前面還有一層 <span style="color: rgb(255, 0, 0);">onData</span><br />直接處理 <span style="color: rgb(255, 0, 0);">onData </span>的事件就可以取得檔案的原始資料<br /><pre class="sql" name="code"><br />1,小明,2010-10-10<br />2,小王,2010-5-15<br />3,小白,2010-2-18<br /></pre><br /><pre class="js" name="code"><br />/*建立 Vars()*/<br />loadVars_1 = new LoadVars();<br /><br />/*載入完成時所執行的程式*/<br />loadVars_1.onData = function(thedata:String) {<br /> if (thedata == undefined) {<br /> trace('資料載入失敗'); return;<br /> }<br /> <br /> /*以換行符號(\n)切割字串*/<br /> var rows:Array = thedata.split("\n");<br /> for(i=0; i<rows.length; i++){<br /> /*以垂直符號(|)切割字串*/<br /> rows[i]=rows[i].split(",");<br /> }<br /><br /> trace(rows);/*顯示載入的資料*/<br />};<br /><br />/*開始載入 load_vars.txt*/<br />loadVars_1.load("load_vars.txt");<br /></pre><br /><br />參考資料:<br /><a href="http://help.adobe.com/zh_TW/AS2LCR/Flash_10.0/help.html?content=00001166.html">Flash CS4 Professional ActionScript 2.0 - LoadVars </a>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-21328993162097923992010-05-03T15:22:00.005+08:002010-05-15T21:16:34.328+08:00[ActionScript] 用 LoadVars 讀取外部資訊<pre class="sql" name="code"><br />vars=1|小明|2010-10-10<br />2|小王|2010-5-15<br />3|小白|2010-2-18<br /></pre><br /><pre class="js" name="code"><br />/*建立 Vars()*/<br />loadVars_1 = new LoadVars();<br /><br />/*載入完成時所執行的程式*/<br />loadVars_1.onLoad = function() {<br /> /*以換行符號(\n)切割字串*/<br /> var rows = this.vars.split("\n");<br /> for(i=0; i<rows.length; i++){<br /> /*以垂直符號(|)切割字串*/<br /> rows[i]=rows[i].split("|");<br /> }<br /><br /> trace(rows);/*顯示載入的資料*/<br />};<br /><br />/*開始載入 load_vars.txt*/<br />loadVars_1.load("load_vars.txt");<br /></pre><br /><br /><br />參考資料:<br /><a href="http://help.adobe.com/zh_TW/AS2LCR/Flash_10.0/help.html?content=00001166.html">Flash CS4 Professional ActionScript 2.0 - LoadVars </a>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-10276631702224773072010-05-03T14:40:00.004+08:002012-03-16T22:58:01.086+08:00[ActionScript] 讀取 XML 資料格式<span style="font-weight:bold;">1.資料欄位以子節點方式載入與解析</span><br /><pre class="xml" name="code"><br /><!-- load_1.xml --><br /><?xml version="1.0" encoding="UTF-8"?><br /><xmltest><br /> <parentnode><br /> <id>1</id><br /> <name>小明</name><br /> <date>2010-10-10</date><br /> </parentnode><br /> <parentnode><br /> <id>2</id><br /> <name>小王</name><br /> <date>2010-5-15</date><br /> </parentnode><br /></xmltest><br /></pre><br /><pre class="js" name="code"><br />/*建立 XML()*/<br />LoadXml_1 = new XML();<br /><br />/*捨棄只包含空白字元的文字節點*/<br />LoadXml_1.ignoreWhite=true;<br /><br />/*載入完成時所執行的程式*/<br />LoadXml_1.onLoad = function(){<br /> articleList = this.firstChild.childNodes;<br /> var txt = "";<br /> for (i=0; i<articleList.length; i++) {<br /> elementList = articleList[i].childNodes;<br /> for (j=0; j<elementList.length; j++) {<br /> elementTag = elementList[j];<br /> switch(elementTag.nodeName){<br /> case "id":<br /> txt += elementTag.firstChild.nodeValue+',';<br /> break;<br /> case "name":<br /> txt += elementTag.firstChild.nodeValue+',';<br /> break;<br /> case "date":<br /> txt += elementTag.firstChild.nodeValue+',';<br /> break;<br /> }<br /> }<br /> txt += '\n';<br /> }<br /><br /> trace(txt); /*顯示載入的資料*/<br />}<br /><br />/*開始載入 load_1.xml*/<br />LoadXml_1.load("load_1.xml");<br /></pre><br /><br /><br /><span style="font-weight:bold;">2.資料欄位以屬性方式載入與解析</span><br /><pre class="xml" name="code"><br /><!-- load_2.xml --><br /><?xml version="1.0" encoding="utf-8"?><br /><xmltest><br /> <parentnode id="1" name="小明" date="2010-10-10" /><br /> <parentnode id="2" name="小王" date="2010-5-15" /><br /></xmltest><br /></pre><br /><pre class="js" name="code"><br />/*建立 XML()*/<br />LoadXml_2 = new XML();<br /><br />/*捨棄只包含空白字元的文字節點*/<br />LoadXml_2.ignoreWhite=true;<br /><br />/*載入完成時所執行的程式*/<br />LoadXml_2.onLoad = function(success) {<br /> var articleList = this.firstChild.childNodes;<br /> var txt = "";<br /> for (i=0; i<articleList.length; i++){<br /> txt += articleList[i].attributes.id+','<br /> +articleList[i].attributes.name+','<br /> +articleList[i].attributes.call+','<br /> +articleList[i].attributes.channel+"\n";<br /> }<br /> <br /> trace(txt);/*顯示載入的資料*/<br />};<br /><br />/*開始載入 load_2.xml*/<br />LoadXml_2.load("load_2.xml");<br /></pre><br /><br /><br /><br />參考資料:<br /><a href="http://help.adobe.com/zh_TW/AS2LCR/Flash_10.0/help.html?content=00001712.html">Flash CS4 Professional ActionScript 2.0 - XML</a>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0