天才教育網(wǎng)合作機構 > 培訓機構 >

                                                                                        東莞設計培訓網(wǎng)

                                                                                        歡迎您!
                                                                                        朋友圈

                                                                                        全國統一學(xué)習專(zhuān)線(xiàn) 9:00-21:00

                                                                                        位置:培訓資訊 > flash中的stop之bug篇

                                                                                        flash中的stop之bug篇

                                                                                        日期:2005-12-23 00:00:00     瀏覽:739    來(lái)源:東莞設計培訓網(wǎng)
                                                                                        flash最簡(jiǎn)單語(yǔ)句之一,stop,經(jīng)考驗,存在bug,如下:

                                                                                        stop語(yǔ)句的功能是停止當前(this)動(dòng)畫(huà)的播放,停止在當前幀。
                                                                                        但是有1些例外,使得動(dòng)畫(huà)所停止的位置并非執行stop語(yǔ)句所在的幀位置。如在第1幀運行stop,可能會(huì )停在第2幀。

                                                                                        以下例子:

                                                                                        建立1個(gè)空f(shuō)la文件,在第1幀寫(xiě):

                                                                                        stop();
                                                                                        trace(_currentframe);//顯示所在幀的位置。

                                                                                        在第7幀插入1個(gè)空關(guān)鍵幀,寫(xiě)下如下代碼:


                                                                                        this.onEnterFrame=function (){
                                                                                        this.gotoAndPlay(2);
                                                                                        this.onEnterFrame=undefined;
                                                                                        trace("enterFrame");
                                                                                        }

                                                                                        這些語(yǔ)句使動(dòng)畫(huà)跳轉到第2幀。
                                                                                        完成后在flash ide中測試該文件,首先output面板中顯示
                                                                                        1

                                                                                        這時(shí)flash停在第1幀,是正確的;然后按下回車(chē),使主場(chǎng)經(jīng)動(dòng)畫(huà)繼續播放,這時(shí),在output面板中顯示的是

                                                                                        1
                                                                                        enterframe
                                                                                        2


                                                                                        如果將第7幀中的goto改稱(chēng)this.gotoAndPlay(3),output面板中就會(huì )顯示3.
                                                                                        這是stop語(yǔ)句的bug,使得動(dòng)畫(huà)停在錯誤的位置。究其原因,其實(shí)都是事件處理函數引起的,純粹的幀AS不會(huì )出現這種問(wèn)題。
                                                                                        問(wèn)題出現的地方從第7幀開(kāi)始,這1幀中,我們設置了1個(gè)onEnterFrame函數,并在函數的*刪除的函數自己,他的功能是使得函數體只執行1次,而且,onEnterFrame函數被設置后不會(huì )馬上執行,下1幀才會(huì )起作用,所以,這段as的功能也是延遲1幀執行某些操作(很多AS代碼中都用到了這個(gè))。

                                                                                        所以,當動(dòng)畫(huà)再回到第1幀時(shí),flash要執行2部分代碼,1個(gè)是onEnterFrame得函數體,1個(gè)是幀代碼。但通常,幀代碼是在事件處理代碼后面執行的,第1幀的所有代碼就為:

                                                                                        this.gotoAndPlay(2);
                                                                                        stop();

                                                                                        而且,as的運行方法是先把所有的代碼放入1個(gè)隊列,然后逐次運行。所以,雖然首先跳轉到了第2幀,但第1幀的stop仍然會(huì )執行,以致*的結果就是停在了第2幀。

                                                                                        這個(gè)bug也由其他的事件處理函數引起,如onKeyDown等。產(chǎn)生這個(gè)問(wèn)題的根本原因就是stop所在的幀位置和當前實(shí)際的幀位置不同。也就是說(shuō),_currentframe屬性和stop語(yǔ)句的幀位置不同,所以,我們可以通過(guò)判斷_currentframe屬性的值來(lái)避免這個(gè)bug。
                                                                                        當flash執行晚onEnterFrame中的this.gotoAndPlay(2)時(shí),_currentframe已經(jīng)被指定為2,這個(gè)是正確的,只需將第1幀
                                                                                        語(yǔ)句改稱(chēng):

                                                                                        if (_currentframe==1) stop();

                                                                                        就可以避免stop停止在錯誤的位置。根據需要,也可以改成:

                                                                                        gotoAndStop(1);

                                                                                        即,無(wú)論在什么地方,都回到第1幀并停止。

                                                                                        如果本頁(yè)不是您要找的課程,您也可以百度查找一下:

                                                                                        奇米在线7777在线精品|国产成人精品免费视|精品无码不卡一区二区三区|国内综合精品午夜久久资源|亚洲视频在线观看..