<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    咖啡伴侶

    呆在上海
    posts - 163, comments - 156, trackbacks - 0, articles - 2

    js 里 Object本身可以做為Map。
    條件是Key只能是String

    如果要用對(duì)象做為Key,這個(gè)Map可以來(lái)實(shí)現(xiàn)。
    效率上由于_getIndex方法每次都要遍歷,耗時(shí)很長(zhǎng),所以通常在1:10左右

    總結(jié)以上,如果Map的Key是String,最好還是用Object來(lái)實(shí)現(xiàn)。
    而且用in來(lái)遍歷Map,效率上不是網(wǎng)上說(shuō)的那么差,和for()差不多

    TWaver.Map = function(){
    ??? this._entrys = null;
    ??? this.initialize.apply(this, arguments);
    }

    TWaver.Map.prototype = {
    ??? initialize: function(){
    ??????? this._entrys = new Array();
    ??? },
    ??? put: function(key, value){
    ??????? if (key == null || key == undefined) {
    ??????????? return;
    ??????? }
    ??????? var index = this._getIndex(key);
    ??????? if (index == -1) {
    ??????????? var entry = new Object();
    ??????????? entry.key = key;
    ??????????? entry.value = value;
    ??????????? this._entrys[this._entrys.length] = entry;
    ??????? }else{
    ??? ??? ??? this._entrys[index].value = value;
    ??? ??? }??? ???
    ??? },
    ??? get: function(key){
    ??????? var index = this._getIndex(key);
    ??????? return (index != -1) ? this._entrys[index].value : null;
    ??? },
    ??? remove: function(key){
    ??????? var index = this._getIndex(key);
    ??????? if (index != -1) {
    ??????????? this._entrys.splice(index, 1);
    ??????? }
    ??? },
    ??? clear: function(){
    ??? ??? this._entrys.length = 0;;
    ??? },
    ??? contains: function(key){
    ??????? var index = this._getIndex(key);
    ??????? return (index != -1) ? true : false;
    ??? },
    ??? getCount: function(){
    ??????? return this._entrys.length;
    ??? },
    ??? getEntrys: function(){
    ??????? return this._entrys;
    ??? },
    ??? _getIndex: function(key){
    ??????? if (key == null || key == undefined) {
    ??????????? return -1;
    ??????? }
    ??????? var _length = this._entrys.length;
    ??????? for (var i = 0; i < _length; i++) {
    ??????????? var entry = this._entrys[i];
    ??????????? if (entry == null || entry == undefined) {
    ??????????????? continue;
    ??????????? }
    ??????????? if (entry.key === key) {//equal
    ??????????????? return i;
    ??????????? }
    ??????? }
    ??????? return -1;
    ??? }
    }


    posted @ 2009-06-18 16:12 oathleo 閱讀(7932) | 評(píng)論 (3)編輯 收藏

    在ie6.0中快速排序算法比Array對(duì)象的sort方法快多了,對(duì)于元素比較少的,快速排序的速度基本上是sort方法的5倍左右,對(duì)于30000個(gè)元素快速排序是sort方法速度的十幾倍
    在ff2.0中兩種排序算法速度基本上差不多,快速排序算法稍微快一點(diǎn)

    <script>
    function rand(m,n){
    ????? //生成一個(gè)m、n之間的整數(shù)
    ??????? var i=Math.random();
    ??????? return Math.round((n-m)*i+m);
    ?}
    ?????????? ?
    ?????????? ?
    function getRandomArr(m,n,l){
    ? //m:生成隨即整數(shù)的最小值,n:生成隨即整數(shù)的最大值,l:生成的數(shù)組的長(zhǎng)度
    ??? var resultArr=[];
    ??? for(var i=0;i<l;i++){
    ??????? resultArr.push(rand(m,n))
    ??? }
    ??? return resultArr;
    }
    ??? ?
    function partition(a,st,en) ?
    { ?
    ??? var s=st; ?
    ??? var e=en+1; ?
    ??? var temp=a[s]; ?
    ??? while(1) ?
    ??? { ?
    ??????? while(a[++s]<temp); ?
    ??????? while(a[--e]>temp); ?
    ??????? if(s>e)break; ?
    ??????? var tem=a[s]; ?
    ??????? a[s]=a[e]; ?
    ??????? a[e]=tem; ?
    ??? } ?
    ??? a[st]=a[e]; ?
    ??? a[e]=temp; ?
    ??? return e; ?
    } ?

    function doSort(a,s,e) ?
    { ?
    ??? if(s<e) ?
    ??? { ?
    ??????? var pos=partition(a,s,e); ?
    ??????? doSort(a,s,pos-1); ?
    ??????? doSort(a,pos+1,e); ?
    ??? } ?
    } ?
    ??? ?
    Array.prototype.quickSort = function() ?
    { ?
    ????? doSort(this,0,this.length-1); ?
    }


    function sortIntF(a,b){return a-b}
    function pk(num){
    ??? //num: 用于排序的數(shù)組的元素個(gè)數(shù)
    ??? //生成用于排序的數(shù)組
    ??? var arr=getRandomArr(1,999999,num);
    ??? ?
    ??? //當(dāng)元素個(gè)數(shù)小于10000時(shí),執(zhí)行n次取平均值 ?
    ??? var n=Math.ceil(10000/num);
    ??? ?
    ??? //生成多個(gè)用于排序的數(shù)組的拷貝
    ??? var quickSortArrs=[];
    ??? var sortArrs=[];
    ??? for(var i=0;i<n;i++){
    ??????? quickSortArrs.push(arr.slice(0));
    ??????? sortArrs.push(arr.slice(0));
    ??? }
    ??? ?
    ??? var t1=new Date();
    ??? ?
    ??? for(var i=0;i<n;i++){
    ??????? quickSortArrs[i].quickSort();
    ??? }
    ??? ?
    ??? var t2=new Date();
    ??? ?
    ??? for(var i=0;i<n;i++){
    ??????? sortArrs[i].sort(sortIntF);
    ??? }
    ??? ?
    ??? var t3=new Date();
    ??? ?
    ??? alert("性能比較,對(duì)于"+num+"個(gè)元素的數(shù)組,平均每次排序花費(fèi)時(shí)間如下:\n"
    ??? +"Array.prototype.sort:"+((t3-t2)/n)+"ms\n"
    ??? +"quickSort:"+((t2-t1)/n)+"ms\n"
    ??? );
    ??? ?
    ??? alert("排序結(jié)果是否正確:"+(sortArrs[0].join()==quickSortArrs[0].join()));
    }

    pk(500);
    pk(2000);
    pk(30000);
    </script>

    posted @ 2009-06-17 12:10 oathleo 閱讀(1301) | 評(píng)論 (0)編輯 收藏

    今天折騰了大半天Flash與Flex3的配合,特總結(jié)一下心得體會(huì):
    1) 如果是通過(guò)Embed來(lái)嵌入swf的話,F(xiàn)lex3只支持FlashCS2所創(chuàng)建的swf.
    2) 如果是通過(guò)loader來(lái)加載的話,只有AS3的swf才能在加載后被控制(這和第一點(diǎn)相反,我花了很長(zhǎng)時(shí)間才弄明發(fā)現(xiàn)這兩點(diǎn),汗!)
    3) 如果要直接加載到Flex當(dāng)中,類(lèi)必須繼承UIComponent,這好比在Flash中必須繼承DisplayObject
    4) 如果要把Flash的組建打包給Flex使用,應(yīng)該使用FlexComponentKit,把MC導(dǎo)出成swc。然后在Flex中把swc配置到 Library Path后,對(duì)應(yīng)的組建就可以作為一等公明在Flex中使用了。如果MC是綁定了類(lèi)的,那么對(duì)應(yīng)類(lèi)繼承UIComponent就可以了。

    ?

    在googleDocs下了一個(gè)corelib包,不是蠻實(shí)用的(前段時(shí)間還自己寫(xiě)trim,浪費(fèi)時(shí)間啊),E文看得累,以備以后查看
    //圖相用法
    import com.adobe.images.JPGEncoder;
    public function submit():void {
    var encoder:JPGEncoder = new JPGEncoder(80);
    var bytes:ByteArray = encoder.encode(getBitmapData());
    var request:URLRequest = new URLRequest(UPLOAD_PAGE);
    //data值就為圖片編碼數(shù)據(jù)ByteArray;
    request.data = bytes;
    request.method = URLRequestMethod.POST;
    //這個(gè)是關(guān)鍵,內(nèi)容類(lèi)型必須是下面文件流形式;
    request.contentType = “application/octet-stream”;
    var loader:URLLoader = new URLLoader();
    loader.load(request);
    }
    //加密用法
    import com.adobe.crypto.SHA1;
    trace(SHA1.hash(”132″));

    //utils包比較繁鎖,全都是靜態(tài)方法
    import com.adobe.utils.ArrayUtil;
    ArrayUtil.arrayContainsValue(arr, value);//arr是否包含value
    ArrayUtil.arraysAreEqual(arr1, arr2);//arr1,arr2是否相等
    ArrayUtil.copyArray(a);//深拷貝
    ArrayUtil.removeValueFromArray(arr, value);//刪除值value

    import com.adobe.utils.StringUtil;
    StringUtil.beginsWith(str1, str2);//str1是否以str2開(kāi)頭
    StringUtil.endsWith(str1, str2);//str1是否以str2結(jié)束
    StringUtil.ltrim(str);//去左空格
    StringUtil.rtrim();
    StringUtil.trim();
    StringUtil.remove(str1, str2);//從str1刪除str2
    StringUtil.replace(input, replace, replaceWith);//把input中的replace置換為replaceWith
    StringUtil.stringsAreEqual(s1, s2, caseSensitive);//s1,s2是否相等,caseSensitive是否大小寫(xiě)敏感

    import com.adobe.utils.DateUtil;
    DateUtil.compareDates(d1, d2);//比較,d1>d2返回-1,=返回0,<返回1
    DateUtil.getAMPM(d);//返回AM or PM
    ….功能比較全, 太多了, 還有幾個(gè)不知道

    import com.adobe.utils.NumberFormatter;
    NumberFormatter.addLeadingZero(5);//返回補(bǔ)0的數(shù),如1變成01

    import com.adobe.utils.IntUtil;
    IntUtil.toHex(n,bigEndian);//16進(jìn)制,bigEndian指定是后補(bǔ)0,還是前補(bǔ)0
    IntUtil.rol(n, m);//n右移m位(位運(yùn)算)
    IntUtil.ror(n, m);//左移

    import com.adobe.utils.DictionaryUtil;
    DictionaryUtil.getKeys(d);//得到鍵名
    DictionaryUtil.getValues(d);//得到值

    import com.adobe.utils.XMLUtil;
    這個(gè)還不會(huì)用,以后慢慢摸,本來(lái)AS3的XML就很完善了

    corelib包下載地址


    Flash跨域調(diào)用問(wèn)題
    由于安全沙箱的限制, 處于不同域下的文件(swf, xml等)在默認(rèn)狀態(tài)下是不能相互調(diào)用的. 比如A域名下的flash不能訪問(wèn)B域名下的XML. 除非B域名在根目錄下的”crossdomain.xml”文檔中包含A域名. 但存在以下問(wèn)題:

    1) 不允許改動(dòng)根目錄
    解決方法: 在AS3允許crossdomain.xml不在根目錄中,這時(shí)就要用 Security.loadPolicyFile(”http://www.example.com/sub/dir/pf.xml”);這樣的方法來(lái)指 定. 當(dāng)然只有crossdomain.xml所在目錄是可以訪問(wèn)的.

    2) 不允許添加crossdomain.xml
    解決方法: 如果要被讀取的是swf文件, 只要在主函數(shù)中加入flash.system.Security.allDomain(”A”)即可. 但如果是其他各式的文件, 比如xml文檔的話怎么辦呢? 可以把xml讀取到B上的b.swf(b上加入flash.system.Security.allDomain(”A”)). 然后在A的a.swf中加載b.swf,然后讀取b.swf中的xml. 類(lèi)似于:
    _mc =event.target.content as Sprite;
    trace(_mc["var"]);



    Loader與URLLoader的比較
    AS3已經(jīng)中Loader與URLLoader是兩個(gè)比較容易混淆的類(lèi),特此區(qū)分:
    應(yīng)用范圍
    Loader: swf,圖片(jpg,png,gif)
    URLLoader:文本文件(xml,php,jsp…)

    使用方法
    Loader:
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
    private function loadComplete(event:Event)
    { trace("done");addChild(loader);}

    URLLoader:
    xmlLoader.dataFormat=URLLoaderDataFormat.TEXT;
    xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
    private function xmlLoaded(event:Event)
    {
    try {myXML = XML(event.target.data);area.text=myXML;}
    catch (e:TypeError) {area.text="Load faild:\n"+e.message;}
    }

    ?


    AS3-點(diǎn)陣化文字


    上面是這兩天做的一個(gè)小東西,它能夠把輸入的文字用點(diǎn)陣來(lái)描述,并存這些信息存入一個(gè)數(shù)組當(dāng)中。然后用這個(gè)數(shù)組來(lái)重新生成“文字”,這些“文字”可以由任意的Sprite組成,并且可以隨意加上動(dòng)畫(huà)。

    承蒙大家厚愛(ài),把源文件放在這里供大家下載。為了便于將來(lái)擴(kuò)展,我使用的是Observer設(shè)計(jì)模式,希望不會(huì)把大家搞混淆。
    源文件下載



    Javascript與Flash互動(dòng)
    在SwfObject解決Html與Flash 之間傳遞參數(shù)問(wèn)題中已經(jīng)簡(jiǎn)要介紹了如何使用SwfObject在頁(yè)面中插入Flash,如何在初始時(shí)由JS向Flash傳遞參數(shù),以及運(yùn)行時(shí)Flash如 何調(diào)用JavaScript中函數(shù)。這里主要介紹運(yùn)行時(shí)JavaScript如何互相傳遞參數(shù), 并控制Flash的播放。

    源文件下載

    其實(shí)JS能直接控制Flash的播放,主要通過(guò)下列方法實(shí)現(xiàn):
    Play() —————————————- 播放動(dòng)畫(huà)
    StopPlay()————————————停止動(dòng)畫(huà)
    IsPlaying()———————————– 動(dòng)畫(huà)是否正在播放
    GotoFrame(frame_number)—————- 跳轉(zhuǎn)到某幀
    TotalFrames()——————————- 獲取動(dòng)畫(huà)總幀數(shù)
    CurrentFrame()——————————回傳當(dāng)前動(dòng)畫(huà)所在幀數(shù)-1
    Rewind()————————————-使動(dòng)畫(huà)返回第一幀
    SetZoomRect(left,top,right,buttom)——-放大指定區(qū)域
    Zoom(percent)——————————改變動(dòng)畫(huà)大小
    Pan(x_position,y_position,unit)————使動(dòng)畫(huà)在x,y方向上平移
    PercentLoaded()—————————-返回動(dòng)畫(huà)被載入的百分比
    LoadMovie(level_number,path)———– 加載動(dòng)畫(huà)
    TGotoFrame(movie_clip,frame_number)- movie_clip跳轉(zhuǎn)到指定幀數(shù)
    TGotoLabel(movie_clip,label_name)—— movie_clip跳轉(zhuǎn)到指定標(biāo)簽
    TCurrentFrame(movie_clip)————— 回傳movie_clip當(dāng)前幀-1
    TCurrentLabel(movie_clip)—————–回傳movie_clip當(dāng)前標(biāo)簽
    TPlay(movie_clip)—————————播放movie_clip
    TStopPlay(movie_clip)———————-停止movie_clip的播放
    GetVariable(variable_name)—————–獲取變量
    SetVariable(variable_name,value)———–變量賦值
    TCallFrame(movie_clip,frame_number)—call指定幀上的action
    TCallLabel(movie_clip,label)—————-call指定標(biāo)簽上的action
    TGetProperty(movie_clip,property)——–獲取movie_clip的指定屬性
    TSetProperty(movie_clip,property,number)-設(shè)置movie_clip的指定屬性

    Read the rest of this entry ?


    Flash中組件(Component)的創(chuàng)建和使用
    這里簡(jiǎn)要介紹Flash中自定義組建的創(chuàng)建和使用方法.由于工作的原因,我用的是AS2, AS3的應(yīng)該類(lèi)似。
    組建的創(chuàng)建
    1 創(chuàng)建一個(gè)類(lèi)文件,比如ClassLoader。這個(gè)文件實(shí)現(xiàn)組件的主要功能。它可以調(diào)用其它類(lèi),比如cn.adamstudio.effects.TextAnimation(這個(gè)類(lèi)自己寫(xiě),可以是簡(jiǎn)單的一個(gè)trace),這些類(lèi)將會(huì)自動(dòng)打包到組件中。

    //ClassLoader類(lèi):
    [IconFile("spidercore.png")];
    class ClassLoader extends MovieClip
    {
    public function setSize()
    {
    _width=18;
    _height=18;
    }

    public function doNothing():Void
    {
    // Trick the compiler into including
    // the TextAnimation class in the component.
    cn.adamstudio.effects.TextAnimation;
    }
    }

    2 創(chuàng)建一個(gè)Fla文件,如SWC_Generator。在其中新建一個(gè)MovieClip,如swc, 設(shè)置如下圖:


    3 在庫(kù)中這個(gè)MC上右鍵,在右鍵菜單里選擇”Component Definition…”.設(shè)置如下圖:


    4 此時(shí)在庫(kù)面板中可以看出,MC已經(jīng)轉(zhuǎn)換成了一個(gè)元件.因?yàn)樵幵诰庉嫚顟B(tài).所以直接導(dǎo)入一個(gè)png圖標(biāo)到舞臺(tái)上,如icon.png.這個(gè)圖標(biāo)是新建組建的圖形標(biāo)志,將來(lái)在庫(kù)面板和舞臺(tái)上將會(huì)看到它的身影.

    5 在庫(kù)中這個(gè)MC上右鍵,在右鍵菜單里選擇”Export SWC File …”,保存SWC文件.

    組建的使用
    1 將生成的SWC文件拷入:
    C:\Documents and Settings\User \Local Settings\ Application Data \Adobe \Flash CS3 \en \Configuration\Components\swc

    2 新建一個(gè)Flash文件,如test.fla.在Flash中重新打開(kāi)Component面板后,會(huì)發(fā)現(xiàn)swc目錄下有我們拷入的SWC文件.將其拖入舞臺(tái)后,在舞臺(tái)上刪除之.(只需要它在庫(kù)中).

    3 在第一幀上加入代碼:
    import cn.adamstudio.effects.TextAnimation;
    var textAni=new TextAnimation;

    即使本地電腦中沒(méi)有cn.adamstudio.effects.TextAnimation,程序照樣能運(yùn)行,因?yàn)樗@個(gè)類(lèi)已經(jīng)包含在了SWC文件當(dāng)中.

    注:SWC_Generator.fla和test.fla的輸出設(shè)置都應(yīng)該選擇AS2,否則無(wú)法得到正確結(jié)果;

    源文件下載:源文件


    AS2 - 創(chuàng)建MovieClip的子類(lèi)
    在Flash中作視覺(jué)表現(xiàn)時(shí),常常需要?jiǎng)?chuàng)建MovieClip的子類(lèi)。下面是一個(gè)不錯(cuò)的框架:

    Avatar子類(lèi):
    class cn.adamstudio.Avatar extends MovieClip
    {
    //定義靜態(tài)變量,用于初始化
    public static var HAPPY:Number = 0;
    public static var SAD:Number = 1;
    public static var IDLE:Number = 2;

    //定義靜態(tài)方法,用于簡(jiǎn)潔地創(chuàng)建自己的instance
    public static function createAvatar(name:String, target:MovieClip, depth:Number, x:Number, y:Number):Avatar
    {
    var av:Avatar = Avatar(target.attachMovie(”AvatarSymbol”, name, depth));
    av.init(x,y);
    return av;
    }

    //設(shè)置instance的坐標(biāo)
    public function init(x:Number, y:Number):Void
    {
    setState(Avatar.HAPPY);
    this._x = x;
    this._y = y;
    }

    //初始化instance
    public function setState(newState:Number):Void
    {
    switch (newState) {
    case Avatar.HAPPY :
    this.gotoAndStop(”HAPPY”);
    break;

    case Avatar.SAD :
    this.gotoAndStop(”SAD”);
    break;

    case Avatar.IDLE :
    this.gotoAndStop(”IDLE”);
    break;
    }
    }
    }
    注:其中的靜態(tài)變量和靜態(tài)函數(shù)是可選的,可以根據(jù)需求的不同而有所變化。

    主文檔中:
    import cn.adamstudio.Avatar;
    var av:Avatar=Avatar.createAvatar("avatar",_root,0,200,200);

    這種方法的特點(diǎn)和優(yōu)點(diǎn)是用使用子類(lèi)的靜態(tài)方法來(lái)實(shí)例化MovieClip的子類(lèi),在主文檔中非常簡(jiǎn)潔。
    源文件下載

    AS-可正可負(fù)隨機(jī)數(shù)的算法
    我以前的寫(xiě)法都是:
    Math.random()*2-1
    今天看到一個(gè)比較有意思的寫(xiě)法:
    Math.random()-Math.random()


    AS3鼠標(biāo)坐標(biāo)總結(jié)
    鼠標(biāo)是Flash里追主要的互動(dòng)因素,經(jīng)常需要偵測(cè)鼠標(biāo)事件(AS3中鼠標(biāo)事件小結(jié))和得到鼠標(biāo)的坐標(biāo)。鼠標(biāo)坐標(biāo)的獲取可以分為在文檔類(lèi)和在子類(lèi)中,兩種不同的情況。

    1)如果是在時(shí)間線軸上,或者文檔類(lèi)上使用:
    stage.mouseX 和 stage.mouseY

    2)在子類(lèi)(如_sprite:Sprite)上使用:
    _sprite.mouseX 和 _sprite.mouseY
    這里得到的是鼠標(biāo)相對(duì)于_sprite的坐標(biāo)。如果需要的是相對(duì)于舞臺(tái)的坐標(biāo),則應(yīng)該使用localToGlobal,如:
    var mousePoint:Point=new Point(_sprite.mouseX, _sprite.mouseY);
    mousePoint=_sprite.localToGlobal(mousePoint);
    trace("Stage coordinates:"+mousePoint);

    注:要使用以上代碼別忘了 import flash.geom.Point;


    AS3練習(xí)-往返運(yùn)動(dòng)


    這是今天做的一個(gè)AS3的運(yùn)動(dòng)練習(xí),主要是加速和減速運(yùn)動(dòng)的配合。發(fā)現(xiàn)粒子多了就會(huì)出現(xiàn)一些奇怪的現(xiàn)象,比如偶爾會(huì)幾個(gè)粒子在原位置閃動(dòng)。可能更Flash的代碼執(zhí)行順序有關(guān),暫時(shí)還搞不懂。

    as3運(yùn)行時(shí)錯(cuò)誤中文說(shuō)明
    1000 系統(tǒng)內(nèi)存不足。 系統(tǒng)可用內(nèi)存無(wú)法滿足 Flash Player 編譯代碼的需要。請(qǐng)關(guān)閉系統(tǒng)上正在運(yùn)行的某些應(yīng)用程序或進(jìn)程。
    1001 未實(shí)現(xiàn)方法 _。
    1002 Number.toPrecision 的范圍是 1 至 21。Number.toFixed 和 Number.toExponential 的范圍是 0 至 20。指定的值不在期望范圍之內(nèi)。 指定的值不在 precision 參數(shù)的期望范圍之內(nèi)。Number.toPrecision 的范圍是 1 至 21。Number.toFixed 和 Number.toExponential 的范圍是 0 至 20。
    1003 radix 參數(shù)必須介于 2 至 36 之間;得到 _。 為方法或?qū)傩缘?radix 參數(shù)傳遞的值小于 2 或大于 36。請(qǐng)傳遞一個(gè)介于 2 至 36 之間的值作為 radix 參數(shù)。
    1004 對(duì)不兼容的對(duì)象調(diào)用方法 _。 嘗試調(diào)用的方法不適用于指定對(duì)象。如果已將原型函數(shù)從一個(gè)對(duì)象復(fù)制到另一個(gè)對(duì)象然后又調(diào)用此函數(shù),但目標(biāo)對(duì)象類(lèi)型與原始對(duì)象類(lèi)型不同,則會(huì)發(fā)生此錯(cuò) 誤。請(qǐng)確保目標(biāo)對(duì)象與原始對(duì)象的類(lèi)型相同。有關(guān)詳細(xì)信息,請(qǐng)參閱 ECMAScript Language Specification(《ECMAScript 語(yǔ)言規(guī)范》)第 3 版中的第 15 章。
    1005 數(shù)組索引不是正整數(shù) (_)。 嘗試使用非正整數(shù)的索引值訪問(wèn)數(shù)組成員。僅傳遞正整數(shù)作為數(shù)組的索引值。
    1006 _ 不是函數(shù)。 嘗試調(diào)用不存在的函數(shù)時(shí),發(fā)生此錯(cuò)誤。請(qǐng)確保正在調(diào)用正確的函數(shù)且自 ActionScript 2.0 以來(lái)此 API 尚未發(fā)生更改。此外,請(qǐng)確保正在使用正確的對(duì)象。例如,使用以下代碼時(shí),將出現(xiàn)此錯(cuò)誤(由于最后一行錯(cuò)誤調(diào)用了變量 big 而未調(diào)用變量 blg):
    var blg:String = “foo”;
    var big:Sprite = new Sprite();
    var error:int = big.length();
    1007 嘗試對(duì)非構(gòu)造函數(shù)進(jìn)行實(shí)例化。
    1008 _ 指代不明確;發(fā)現(xiàn)多個(gè)匹配的綁定。
    1009 無(wú)法訪問(wèn)空對(duì)象引用的屬性或方法。 計(jì)算結(jié)果為 null 的對(duì)象可以不包含任何屬性。在某些意外(盡管有效)的情況下,可能發(fā)生此錯(cuò)誤。以創(chuàng)建 Sprite 對(duì)象的以下代碼為例。由于從未將此 Sprite 對(duì)象添加到顯示列表中(使用 DisplayObjectContainer 對(duì)象的 addChild() 方法),因此其 stage 屬性設(shè)置為 null。在這種情況下,此示例將生成此錯(cuò)誤,這是因?yàn)?Sprite 對(duì)象的 stage 屬性不能擁有任何屬性: Read the rest of this entry ?


    AIR-最新RSSReader(基于Flash)
    經(jīng)過(guò)長(zhǎng)時(shí)間的努力,終于用Flash CS3+AS3+AIR Beta2做出了RSSReader 2.0。
    前一段時(shí)間用html+JS做了個(gè)WordpressReader, 雖然實(shí)現(xiàn)了自動(dòng)升級(jí),等很cool的功能,但界面還是比較簡(jiǎn)樸。
    AIR讀取Blog RSS - Adobe AIR Beta2 實(shí)踐
    WordpressReader 1.1 完成

    這次做的RSSReader是基于ActionScript3的,界面漂亮了很多,而且用戶體驗(yàn)也有了顯著的提高。
    程序下載:http://www.adamstudio.cn/blog/download/RSSReader.air
    初始介面:

    文章閱讀界面:

    實(shí)現(xiàn)的功能:
    1 讀取服務(wù)器端XML文檔;
    2 將讀取的XML文檔儲(chǔ)存到AIR的內(nèi)建本地?cái)?shù)據(jù)庫(kù)SQLite !!!(太酷了!)
    3 判斷網(wǎng)絡(luò)連接狀況,如果網(wǎng)絡(luò)暢通就讀取并以動(dòng)畫(huà)的形式展示文章標(biāo)題,同時(shí)用最新文章刷新SQLite中已有文章。如果網(wǎng)絡(luò)不通,則讀取并顯示SQLite中儲(chǔ)存的文章;
    4 以動(dòng)畫(huà)形式展示動(dòng)畫(huà)文章標(biāo)題;
    5 自定義事件和文章標(biāo)題與文章內(nèi)容之間的切換。

    多說(shuō)也無(wú)用,試用一下你就知道Adobe AIR有多強(qiáng)了!
    程序下載:http://www.adamstudio.cn/blog/download/RSSReader.air


    Flash-navigateToURL取代getURL
    AS3中使用 navigateToURL取代了getURL,個(gè)人感覺(jué)navigateToURL最大的好處就是方便了傳遞參數(shù),不足的地方嘛,據(jù)說(shuō)彈出的新窗口會(huì)被 瀏覽器攔截。需要使用:ExternalInterface.call(”window.open”,winurl,”");來(lái)避免,但是這是采用了調(diào)用 JS來(lái)做,是必須在瀏覽器支撐并且JS可以使用的情況下(沒(méi)有測(cè)試)。
    另外發(fā)現(xiàn)在Adobe AIR中使用navigateToURL打開(kāi)連接時(shí),只能在新窗口中打開(kāi)(不會(huì)被瀏覽器攔截),”_self”,”_parent”,”_top”都沒(méi)有用.而且都是調(diào)用瀏覽器,而不是在AIR中打開(kāi).

    具體用法如下:

    package {
    import flash.display.Sprite;
    import flash.net.navigateToURL;
    import flash.net.URLRequest;
    import flash.net.URLVariables;

    public class NavigateToURLExample extends Sprite {

    public function NavigateToURLExample() {
    var url:String = “http://www.adobe.com”;
    var variables:URLVariables = new URLVariables();
    variables.exampleSessionId = new Date().getTime();
    variables.exampleUserLabel = “Your Name”;
    var request:URLRequest = new URLRequest(url);
    request.data = variables;
    try {
    navigateToURL(request);
    }
    catch (e:Error) {
    // handle error here
    }
    }
    }
    }


    Flash-如何改變動(dòng)態(tài)文本透明度?
    因?yàn)镕lash的系統(tǒng)字體不直接支持透明,所以我們得通過(guò)嵌入字體或者Filter類(lèi)來(lái)解決。簡(jiǎn)單地通過(guò)改變動(dòng)態(tài)文本的alpha或者它做在的mc的alpha都是沒(méi)有用的。

    1 嵌入字體
    這種方法最簡(jiǎn)單,選中動(dòng)態(tài)文本框,然后在屬性面板中點(diǎn)嵌入(“Embed”)按鈕,按后選擇要全部字庫(kù)嵌入,還是只嵌入部分字符。但代價(jià)是文件會(huì)變大,尤其在嵌入中文字體的時(shí)候,絕對(duì)是噩夢(mèng)。當(dāng)然只是嵌入下載進(jìn)度0-9這樣簡(jiǎn)單的幾個(gè)字符,還是非常方便的。

    2 Filter
    這是從Blueidea學(xué)來(lái)的,就是給動(dòng)態(tài)文本增加一個(gè)濾鏡,即使是空濾鏡也可以。
    AS3中代碼
    //建立動(dòng)態(tài)文本
    var my_txt:TextField=new TextField();
    my_txt.autoSize = TextFieldAutoSize.LEFT;
    my_txt.background = true;
    my_txt.border = true;
    my_txt.text = “Hello world and welcome to the show.”;
    //定義濾鏡
    var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);
    my_txt.filters = [txt_blur];
    my_txt.alpha = 0.5;
    //加入動(dòng)態(tài)文本
    my_txt.x=my_txt.y=50;
    addChild(my_txt);
    AS2中代碼
    import flash.filters.BlurFilter;
    var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);
    this.createTextField(”my_txt”, 1, 100, 100, 300, 100);
    my_txt.text = “DDGGDGDGDGDG”;
    my_txt.filters = [txt_blur];
    my_txt._alpha = 50;

    3 BitmapData 和 ColorMatrixFilter
    據(jù)HbrO說(shuō)BitmapData和ColorMatrixFilter也能實(shí)現(xiàn)動(dòng)態(tài)文本的半透明效果。但我這人比較懶,發(fā)現(xiàn)一種方法之后就犯懶了。以后有時(shí)間再研究吧 ,哈哈。


    AS3中鼠標(biāo)事件小結(jié)
    鼠標(biāo)事件(MouseEvent)和鼠標(biāo)位置(AS3鼠標(biāo)坐標(biāo)總結(jié))是 RIA中最重要的人機(jī)交互途徑。最近在做一個(gè)動(dòng)態(tài)產(chǎn)品展示的系統(tǒng)ProdutShow的時(shí)候才發(fā)現(xiàn)自己對(duì)鼠標(biāo)事件的了解有多么膚淺。現(xiàn)在 ProductShow已經(jīng)做完了,這里把在使用鼠標(biāo)事件時(shí)要注意的問(wèn)題總結(jié)一下:
    1 鼠標(biāo)事件分為MOUSE_OVER, MOUSE_MOVE, MOUSE_DOWN, MOUSE_UP, MOUSE_OUT, MOUSE_WHEEL和MOUSE_LEAVE。其中前六個(gè)事件都來(lái)自flash.events.MouseEvent類(lèi),最后一個(gè) MOUSE_LEAVE卻是來(lái)自flash.events.Event,在導(dǎo)入類(lèi)包的時(shí)候一定要注意這個(gè)問(wèn)題,因?yàn)槲以谶@點(diǎn)上就花了很長(zhǎng)時(shí)間調(diào)試,才得發(fā) 現(xiàn)問(wèn)題所在。
    MOUSE_OVER - 鼠標(biāo)移動(dòng)到目標(biāo)對(duì)象之上時(shí)觸發(fā), 可以用于模擬按鈕的mouse over效果;
    MOUSE_MOVE - 鼠標(biāo)在目標(biāo)對(duì)象之上移動(dòng)時(shí)觸發(fā),主要用于判斷。比如判斷在拖拽實(shí)例時(shí),實(shí)例是否在允許的范圍之內(nèi),如果超出,立刻停止拖拽或者重新設(shè)定實(shí)例的坐標(biāo);
    MOUSE_DOWN - 鼠標(biāo)在目標(biāo)對(duì)象之上按下時(shí)觸發(fā)。注意,只有按下鼠標(biāo)左鍵時(shí)才會(huì)觸發(fā),右鍵和滾輪都不會(huì)觸發(fā)。在目標(biāo)對(duì)象之外按下鼠標(biāo)左鍵,再移動(dòng)到目標(biāo)對(duì)象之上時(shí),也不會(huì)觸發(fā);
    MOUSE_UP - 鼠標(biāo)在目標(biāo)對(duì)象之上松開(kāi)時(shí)觸發(fā)。注意,只有松開(kāi)鼠標(biāo)左鍵時(shí)才會(huì)觸發(fā),右鍵和滾輪都不會(huì)觸發(fā)。在目標(biāo)對(duì)象之上按下鼠標(biāo)左鍵,再移動(dòng)到目標(biāo)對(duì)象之外松開(kāi)時(shí),不會(huì)觸發(fā)。但在目標(biāo)對(duì)象之外按下鼠標(biāo)左鍵,再移動(dòng)到目標(biāo)對(duì)象之上松開(kāi)時(shí),就會(huì)觸發(fā)。
    MOUSE_OUT- 鼠標(biāo)移動(dòng)到目標(biāo)對(duì)象之外時(shí)觸發(fā)。
    MOUSE_WHEEL - 鼠標(biāo)在目標(biāo)對(duì)象之上轉(zhuǎn)動(dòng)滾輪時(shí)觸發(fā)。
    MOUSE_LEAVE - 當(dāng)光標(biāo)離開(kāi)舞臺(tái)時(shí)觸發(fā)(stage.addEventListener(Event.MOUSE_LEAVE,leaveHandler);)。在使用自 定鼠標(biāo)后,在鼠標(biāo)離開(kāi)舞臺(tái)時(shí),觸發(fā)MOUSE_LEAVE事件,然后可以把自定義的鼠標(biāo)隱藏掉,避免還停留在舞臺(tái)上。

    2 mouseChildren。目標(biāo)對(duì)象中含有子實(shí)例時(shí),感應(yīng)鼠標(biāo)行為的是子時(shí)列,而非目標(biāo)對(duì)象。如果使用 cursor.mouseEnabled=false; 就可以由目標(biāo)對(duì)象來(lái)更應(yīng)鼠標(biāo)行為。

    3 mouseEnabled。當(dāng)實(shí)例重疊時(shí),出于顯示列表上方的實(shí)例總比下方實(shí)例更有優(yōu)先權(quán)感應(yīng)鼠標(biāo)行為。當(dāng)想讓下方實(shí)例感應(yīng)鼠標(biāo)行為時(shí)使用 cursor.mouseEnabled=false; 即可。這常用于自定義鼠標(biāo)后,去除自定義鼠標(biāo)對(duì)鼠標(biāo)行為的干涉,因?yàn)樽远x鼠標(biāo)往往一直處于鼠標(biāo)下方,其他實(shí)例無(wú)法再感應(yīng)到鼠標(biāo)的變化。

    另外,也許DOUBLE_CLICK也應(yīng)該算做鼠標(biāo)事件,但要使用它,必須先讓doubleClickEnabled=true:
    var bg:Sprite=new Sprite();
    bg.doubleClickEnabled=true;
    bg.addEventListener(MouseEvent.DOUBLE_CLICK,clickHandler);


    typeof、is、as的區(qū)別
    typeof、is、as都是用于判斷變量類(lèi)型的,只是各自的返回值不同。請(qǐng)看下方代碼:
    var a:Number=0;
    trace(typeof(a));//輸出:Number
    trace(typeof(typeof(a)));//輸出:String
    trace(a is Number);//輸出:true
    trace(a as Number);//輸出:0
    trace(a as String);//輸出:null



    Null、NaN和undefined的區(qū)別
    其實(shí)Null、NaN和undefined都是變量的默認(rèn)初始值。變量類(lèi)型不同,系統(tǒng)給與的初始值就不同:
    int,uint - 0
    Boolean - false
    Number - NaN
    String,Array,Object - null
    未指定變量類(lèi)型 - undefined



    SwfObject解決Html與Flash之間傳遞參數(shù)問(wèn)題
    在徹底摒棄Adobe的 激活A(yù)ctiveX控件的方法一文中已經(jīng)詳細(xì)分析了使用Adobe提供的AC_RunActiveContent.js導(dǎo)致HTML與Flash之間不能 傳遞參數(shù)的問(wèn)題。經(jīng)過(guò)Adobe論壇里GWD的提示,我轉(zhuǎn)而尋求SwfObject的幫助。發(fā)現(xiàn)SwfObject是一個(gè)很好的解決方案。

    SwfObject英文介紹:http://blog.deconcept.com/swfobject/
    SwfObject中文翻譯:http://www.awflasher.com/flash/articles/swfobj.htm
    源文件:SWFObject 1.5

    關(guān)于SwfObject的介紹上面兩篇文章已經(jīng)講的很詳細(xì)了。我這里只列一段標(biāo)準(zhǔn)的應(yīng)用和一些上面兩篇文章沒(méi)有提到的問(wèn)題.

    Html中的JS代碼
    <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript">
    // <![CDATA[
    var so = new SWFObject("asCallJs.swf", "MyDemo", "500", "400", "9", "#FF6600");
    so.addVariable("param1", "Parameter1"); // this line is optional, but this example uses the variable and displays this text inside the flash movie
    so.addVariable("param2", "Parameter2");
    so.useExpressInstall('expressinstall.swf');
    so.write("flashcontent");
    // ]]>
    </script><!--被AS調(diào)用的JS函數(shù)-->
    <script language="Javascript">
    // <![CDATA[
    // adds two numbers, and sends the result back to ActionScript
    function addNumbers(num1, num2)
    {
    result=num1 + num2;
    alert("3+7=" + result);
    return (result);
    }
    // ]]>
    </script> Read the rest of this entry ?


    徹底摒棄Adobe的激活A(yù)ctiveX控件的方法
    大家知道,在IE中只有激活了 ActiveX控件,F(xiàn)lash才能夠與瀏覽者交互,否則得手動(dòng)點(diǎn)一下激活。Flash也提供了一個(gè)很“方便”的解決方案,就是在發(fā)布swf文件的同時(shí), 發(fā)布html文件即可。這樣Flash會(huì)在生成一個(gè)swf文件,一個(gè)包含swf的Html文件,和一個(gè)“AC_RunActiveContent.js” 文件。Html文件通過(guò)調(diào)用AC_RunActiveContent.js,實(shí)現(xiàn)激活A(yù)ctiveX控件。這一切都很便捷,直到你希望在html和 Flash之間傳遞參數(shù)。
    問(wèn)題出現(xiàn)
    在很多商業(yè)網(wǎng)站中,都涉及到用同一個(gè)Flash來(lái)顯示大量不同的內(nèi)容(圖片,視頻或產(chǎn)品信息等),這就需要向這個(gè)Flash傳遞參數(shù)。常見(jiàn)的傳參方法有三種,但都會(huì)受到AC_RunActiveContent.js的不良影響。
    1 ExternalInterface: 這是困擾我最久的一個(gè)問(wèn)題。據(jù)Adobe的描述,這是最好的傳參方法,能都非常自由和直接地在AS和JS之間互相傳遞參數(shù)或者互相調(diào)用函數(shù)。但我在使用 Adobe的示例文件時(shí)發(fā)現(xiàn),在IE中AS無(wú)法得到JS的返回值(ExternalInterface在IE中的Bug),經(jīng)過(guò)不斷的嘗試才發(fā)現(xiàn)是 AC_RunActiveContent.js在搗鬼,只要把它和html中對(duì)應(yīng)代碼以 及<noscript></noscript>刪除就一切正常了。
    請(qǐng)看示例:
    Player8,AS2: http://www.adamstudio.cn/lab/var/test/test_v8.html
    Player9,AS3: http://www.adamstudio.cn/lab/var/test/test_v9.html
    如果帶有激活A(yù)ctiveX控件的那段JS代碼,IE中就無(wú)法得到返回值,請(qǐng)看:
    http://www.adamstudio.cn/lab/var/test/test_error.html
    所有源文件:http://www.adamstudio.cn/lab/var/test/test.rar
    2 FlashVars:
    3 URL傳遞參數(shù)
    后 兩種方法受AC_RunActiveContent.js的影響更大,因?yàn)檫@兩種方法都是 在<noscript></noscript>之間加入代碼,而在JS能運(yùn)行的瀏覽器當(dāng)中(絕大多數(shù)瀏覽器都能運(yùn)行JS),這些 代碼根本就不會(huì)運(yùn)行。所以無(wú)論在Firefox或者IE中都不起任何作用!
    也就是說(shuō)常用的三種在Html與AS之間傳遞參數(shù)的方法均受到激活A(yù)ctiveX控件的那段代碼的影響。所以要想在html和Flash之間傳遞參數(shù),就必須摒棄Flash自帶的激活A(yù)ctiveX控件的方案!

    替代方案:SwfObject 請(qǐng)參考SwfObject解決Html與Flash之間傳遞參數(shù)問(wèn)題

    posted @ 2009-06-10 17:03 oathleo 閱讀(740) | 評(píng)論 (0)編輯 收藏

         摘要: TWaver3.0 SVG WebRadar Chart   閱讀全文

    posted @ 2009-06-04 16:40 oathleo 閱讀(1183) | 評(píng)論 (1)編輯 收藏

         摘要: TWaver3.0 SVG WebGIS  閱讀全文

    posted @ 2009-05-19 10:54 oathleo 閱讀(1202) | 評(píng)論 (0)編輯 收藏

         摘要: 電信拓?fù)鋀eb解決方案  閱讀全文

    posted @ 2009-04-13 10:33 oathleo 閱讀(1883) | 評(píng)論 (7)編輯 收藏

         摘要: 電信拓?fù)鋀eb解決方案  閱讀全文

    posted @ 2008-12-17 11:15 oathleo 閱讀(2059) | 評(píng)論 (15)編輯 收藏

         摘要: 電信拓?fù)浣鉀Q方案  閱讀全文

    posted @ 2008-09-23 18:50 oathleo 閱讀(1513) | 評(píng)論 (3)編輯 收藏

    買(mǎi)房,錢(qián)到用時(shí)方恨少.
    恨什么呢?自己怎么還是這么窮?
    不夠努力,走錯(cuò)了路,還是?
    是不是做技術(shù)就只能這樣了?
    太多的疑問(wèn),沒(méi)有答案,只能往前走.

    posted @ 2008-08-06 15:59 oathleo 閱讀(935) | 評(píng)論 (2)編輯 收藏

         摘要:   閱讀全文

    posted @ 2008-07-07 10:40 oathleo 閱讀(381) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共17頁(yè): First 上一頁(yè) 9 10 11 12 13 14 15 16 17 下一頁(yè) 
    主站蜘蛛池模板: 成人av免费电影| 伊人久久精品亚洲午夜| 边摸边吃奶边做爽免费视频网站| 亚洲午夜久久久影院| 99视频在线精品免费观看6| 手机看片国产免费永久| 亚洲国产精华液2020| 久久精品国产亚洲AV大全| 亚洲一级片内射网站在线观看| 又粗又大又黑又长的免费视频| 久久国产福利免费| 亚洲av无码一区二区三区天堂 | 91高清免费国产自产拍2021| 美女黄频视频大全免费的| 国内成人精品亚洲日本语音| 亚洲伊人久久大香线蕉在观| 亚洲av无码精品网站| 亚洲精品国精品久久99热| 最近中文字幕mv免费高清电影| 无码精品国产一区二区三区免费| 污污污视频在线免费观看| 亚洲色大成网站www尤物| 亚洲高清视频免费| 国产V亚洲V天堂A无码| 亚洲国产日韩在线观频| 亚洲综合区小说区激情区| 亚洲精品无码永久中文字幕| 亚洲一级特黄大片无码毛片| 亚洲中文字幕不卡无码| 99ri精品国产亚洲| 亚洲最大成人网色香蕉| 亚洲天堂一区二区三区| 一区二区三区亚洲| ASS亚洲熟妇毛茸茸PICS| 国产综合成人亚洲区| 国产综合免费精品久久久| 69av免费观看| 亚洲一级毛片免费看| 最近免费字幕中文大全视频| 黄页网站免费观看| 又粗又大又猛又爽免费视频 |