鏈表動畫畢業(yè)論文_第1頁
已閱讀1頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  畢業(yè)設計(論 文)學生工作手冊</p><p>  擬定題目: 鏈表基本操作動畫演示 </p><p><b>  姓 名</b></p><p><b>  學 號</b></p><p>&

2、lt;b>  院 (系)</b></p><p><b>  專 業(yè)</b></p><p><b>  指導教師</b></p><p><b>  年 月 日</b></p><p><b>  摘要</b><

3、/p><p>  隨著科技的發(fā)展,教學方式也越來越先進,現(xiàn)在已經(jīng)不止有傳統(tǒng)課本教學方式,還有多媒體教學方式。這樣一種情況下,動畫教學更受大眾親睞。動畫的直觀和方便更能清楚明白的表達人們用言語闡述不清的一些理論和算法。這樣,設計好一個動畫演示就非常的有意義。</p><p>  本設計主要研究的是鏈表基本操作的動畫演示,通過用flashbuilder中的actionscript編程做一個鏈表基本

4、操作的交互式動畫,能夠幫助我們更直觀的理解鏈表的一些基本操作,主要是刪除節(jié)點、插入節(jié)點,很多復雜的數(shù)據(jù)結構都包含鏈表結構。</p><p>  關鍵詞:flash,鏈表,刪除,插入,動畫</p><p><b>  Abstract</b></p><p>  With the development of science and techno

5、logy, is becoming more and more advanced teaching methods, now has more than the traditional textbook teaching methods, and multimedia teaching methods. Such a case, the animation teaching more favor by the public. Anima

6、tion intuitive and convenient and can clearly understand the expression of people with words of some theories and algorithms. In this way, design a good animation demo is very meaningful </p><p>  Widespread

7、 understanding algorithm difficulties in teaching, in such a case, this design research is a list of the basic operation of an animated demo, through the use of flash in a list of basic operation of interactive animation

8、, can help us more intuitive understanding of linked lists some of the basic operation, mainly, insert, delete node, many complicated data structure contains list structure. </p><p>  Keywords:flash,list,del

9、ete,insert,animation </p><p><b>  目錄</b></p><p><b>  前言1</b></p><p>  一、 選題意義及背景1</p><p>  二、 方案及論證2</p><p>  一)、動畫軟件 FlashBuild

10、er概述2</p><p>  1、FlashBuilder簡介2</p><p>  2、腳本語言ActionScript簡介2</p><p>  3、ActionScript 3.0 的優(yōu)點3</p><p>  二) 數(shù)據(jù)結構之鏈表4</p><p><b>  1、 鏈表概述4</

11、b></p><p>  2、鏈表的插入操作5</p><p>  3、 鏈表的刪除操作6</p><p>  4、單鏈表的特點7</p><p>  三) 設計的功能描述7</p><p><b>  四) 設計思想7</b></p><p>  五) 設

12、計中的主要難點8</p><p>  1、 鼠標點擊事件8</p><p>  2、 指針的移動8</p><p><b>  三、 過程論述8</b></p><p>  一)平臺搭建和初步準備工作8</p><p><b>  1、環(huán)境要求9</b></

13、p><p><b>  2、準備工具9</b></p><p><b>  3、創(chuàng)建項目9</b></p><p><b>  4、編輯資源9</b></p><p>  二) 動畫實現(xiàn)11</p><p>  1、主界面代碼設計:12</p

14、><p>  2、插入操作代碼設計12</p><p>  3、 刪除操作的代碼設計14</p><p>  三) 動畫運行17</p><p>  四、存在的問題和不足18</p><p><b>  五、結語18</b></p><p><b>  六、

15、謝辭18</b></p><p><b>  七、參考文獻19</b></p><p><b>  前言</b></p><p>  數(shù)據(jù)結構課程是計算機學科中一門重要的基礎課程,是進行程序設計的理論和技術基礎,學好該課程對于計算機其他課程的學習有著深遠的意義。</p><p>  

16、但在教學中普遍存在對算法理解上的困難,在這樣一種情況下,本設計主要研究的是鏈表基本操作的動畫演示,它能夠幫助我們更直觀的理解鏈表的一些基本操作,比如刪除節(jié)點、插入節(jié)點、修改節(jié)點、鏈表的逆置等等,很多復雜的數(shù)據(jù)結構都包含鏈表結構,因此,學好鏈表對于我們學習其他數(shù)據(jù)結構有很大的幫助。同時,在進行設計的同時,讓我們能夠?qū)W會如何獨立的設計一個完整的演示動畫,也對我們編程技術的一種鍛煉。</p><p>  在做這次畢業(yè)設

17、計之前,本人在圖書館借閱了《Flash Builder4&Flex4寶典》、《Flash ActionScript 3 殿堂之路》、《動畫制作與創(chuàng)意典型實例》《數(shù)據(jù)結構C語言版》等書。在這次的畢業(yè)設計過程中,吳海濤老師給了我很大的幫助,在此表示感謝。</p><p>  本設計主要是基于FlashBuilder平臺的動畫設計,就是用Flash將鏈表生動的表現(xiàn)出來。用Flash做出來的鏈表能夠更加生動地反映

18、出鏈表的構成,和對鏈表的刪除操作。做好這次的畢業(yè)設計,本人認為是非常有必要的。在進行設計的時,讓我們能夠?qū)W會如何獨立的設計一個完整的演示動畫,也對我們編程技術的一種鍛煉。</p><p>  Flashbuilder是集動畫、聲音和交互于一體的軟件,因此在做這個設計的時候,要考慮到動畫的播放模式,以及交互的應用,加入按鈕可以與瀏覽者互動,在此過程中我們又可以學會按鈕的創(chuàng)建、按鈕中的動畫以及加入到按鈕中的Actio

19、n Script代碼知識。在遇到不會的時候,一方面向指導老師詢問,另一方面,自己也可以到網(wǎng)上去查閱。</p><p>  畢業(yè)設計是每個專業(yè)的學習、實踐和創(chuàng)新的實踐性教學環(huán)節(jié),做好畢業(yè)設計,也是對自己所學的知識的一次系統(tǒng)性的總結。有助于對自己經(jīng)行查漏補缺,鞏固以前所學的知識,這樣,也是對自身的一次升華。</p><p><b>  選題意義及背景</b></p&

20、gt;<p>  動畫演示這種教學方式的出現(xiàn)使我們的教學進入了一個全新的時代,動畫教學的交互性的控制性強,能夠使我們直接參與進去。使我們的教學變得更加的輕松。在其他教學方式中具有無法比擬的優(yōu)勢。傳統(tǒng)的教學方式與動畫教學方式相比,有很多的缺點,比如在傳統(tǒng)的教學過程中,一切都是由教師決定的從教學內(nèi)容、教學策略、教學方法、教學步驟甚至學生做的練習都是教師事先安排好的,學生只能被動地參與這個過程,即處于被灌輸?shù)臓顟B(tài)。</p&

21、gt;<p>  將動畫結合到教學中,可以避免傳統(tǒng)教學的一些缺點。使學生能夠主動接受,慢慢理解。動畫演示鏈表的基本操作對于我們對于鏈表的結構和基本操作算法有非常大的幫助,另外,鏈表是數(shù)據(jù)結構中比較基礎的一種結構,學好鏈表對于我們學習其他的結構有很大的幫助。</p><p><b>  方案及論證</b></p><p>  一)、動畫軟件 FlashBu

22、ilder概述</p><p>  1、FlashBuilder簡介</p><p>  這款軟件是由Adobe公司開發(fā)的。它對軟件開發(fā)人員使用開放源 Flex 框架快速開發(fā)跨平臺富 Internet 應用程序 (RIA) 和內(nèi)容起到了一定的幫助作用。這個軟件包含了對智能編碼、調(diào)試及可視設計的支持,提供功能非常強大的測試工具,而這些工具的使用可以提高開發(fā)速度并創(chuàng)建出性能更高的應用程序。&l

23、t;/p><p>  Flex 是FlashBuilder中的一個高效、免費的開放源框架,軟件開發(fā)人員可以將其用于構建具有表現(xiàn)力的 Web 應用程序,這些web應用程序利用 Adobe Flash Player 和 Adobe AIR 運行時可以實現(xiàn)跨瀏覽器、桌面和操作系統(tǒng)實現(xiàn)一致的部署。09年5月,下一代Flex Builder,即Flex Builder 4.0(是IDE,而非SDK)改名為Flash Build

24、er。雖然只能使用 Flex 框架構建 Flex 應用程序,開發(fā)人員利用Adobe Flash Builder軟件可以通過智能編碼、交互式遍歷調(diào)試以及可視設計用戶界面布局等功能加快開發(fā)。</p><p>  腳本語言ActionScript簡介</p><p>  ActionScript腳本語言已經(jīng)廣泛的應用到Flash CS、FlashBuilder中。應用ActionScript編程

25、可以實現(xiàn)動畫的交互性。</p><p>  ActionScript 腳本語言是一種針對 Adobe Flash Player 運行時環(huán)境的編程語言,它面向?qū)ο?,功能強大、具有業(yè)界標準素質(zhì),實現(xiàn)了交互性、數(shù)據(jù)處理以及其它許多功能ActionScript 腳本語言功不可沒。 ActionScript 編寫的代碼是由 Flash Player播放器 中的 ActionScript 虛擬機 (AVM) 來編譯執(zhí)行的。A

26、ctionScript 代碼通常被編譯器編譯成"字節(jié)碼格式"(是一種由計算機編寫且能夠為計算機所理解的編程語言),字節(jié)碼嵌入 SWF 文件中,SWF 文件由運行時環(huán)境 Flash Player 執(zhí)行。 </p><p>  ActionScript 3.0 版本的腳本語言向我們提供了可靠的編程模型,開發(fā)人員在進行面向?qū)ο蟮木幊虝r對此模型會感到似曾相識。</p><p>

27、  在ActionScript面向?qū)ο缶幊讨校魏晤惗伎梢园?種類型的特性:屬性、方法、事件。這些元素共同用于管理程序使用的數(shù)據(jù)塊,并用于確定執(zhí)行哪些動作以及動作的順序。 </p><p>  ActionScript 3.0 中的常用的一些函數(shù)介紹:獲得某個實例對象的類名:getQualifiedClassName (實例名字符串表達式);Math.random(); 范圍為0~1的隨機值;取出方法

28、getter;設定方法setter;addEventListener()添加點擊響應件;stop();gotoAndPlay();等等,</p><p>  ActionScript 3.0 中常用的類:Tweener 用于過度與切換的一組動畫;FlexLib 一套開源的Flex界面組件庫。</p><p>  ActionScript 3.0 中常用的屬性:X屬性主要用于設置對象在舞臺中

29、的水平坐標;Y屬性主要用于設置對象在舞臺中的垂直坐標;scaleX屬性用于設置對象的水平縮放比例,其默認值為1,表示按100%縮放;alpha屬性用于設置對象的透明度;visible設置對象可見度,事實上可以將屬性視為包含在對象中的子變量。</p><p>  事件:是確定計算機執(zhí)行哪些指令以及何時執(zhí)行的機制。從本質(zhì)上來說,事件就是所發(fā)生的、ActionScript能夠識別并可響應的事情。</p>

30、<p>  ActionScript 3.0 的優(yōu)點</p><p>  完全支持面向?qū)ο缶幊蹋∣OP)語言。核心語言基于 ECMAScript(ECMA 262)標準,對OOP架構深層優(yōu)化。徹底更新的顯示對象系統(tǒng)架構。引入了封裝的概念,使得程序安全性大大提高,各個對象之間的關系也通過封裝,訪問控制而得以確定,避免了不可靠的訪問給程序帶來的意外產(chǎn)生。它旨在方便創(chuàng)建擁有大型數(shù)據(jù)集和面向?qū)ο蟮目芍赜么a庫的

31、高度復雜應用程序。</p><p>  采用了先進的 E4X,使 XML 成為 ActionScript 3 語言的內(nèi)建數(shù)據(jù)類型(native support)。操作直白、簡單。與ActionScript 2比較, 極大地減輕了XML數(shù)據(jù)處理工作量。 </p><p>  全面支持正則表達式。正則表達式也成了ActionScript 3的內(nèi)建數(shù)據(jù)類型,ActionScript 3對字符串的

32、處理能力空前增強。 </p><p>  AS3采用了容器的思想,告別了as2一個MovieClip打天下的局面。</p><p>  異常處理機制。異常包括信息全面、易于調(diào)試和處理。Flash API全面支持異常處理機制。 </p><p><b>  數(shù)據(jù)結構之鏈表</b></p><p><b>  1、

33、 鏈表概述</b></p><p>  鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結構,數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態(tài)生成。每個結點包括兩個部分:一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結點地址的指針域。它可以和隨意的在其任意一個位置進行插入和刪除操作,這對于動態(tài)的數(shù)據(jù)處理十分的有利。比如,有的班級有2

34、00人,而有的班只有30人,如果要用同一個數(shù)組先后存放不同班級的學生數(shù)據(jù),則必須定義長度為200的數(shù)組。如果實現(xiàn)難以確定一個班的最多人數(shù),則必須把數(shù)組定得足夠大,以能存放任何班級的學生數(shù)據(jù),數(shù)組大小確定后不可改變,需要連續(xù)的內(nèi)存空間,顯然這將會浪費內(nèi)存。然而鏈表則沒有這種缺點,它并不需要連續(xù)的內(nèi)存空間,它是根據(jù)需要開辟內(nèi)存單元。圖2.1.1表示最簡單的一種鏈表的結構。</p><p>  圖2.1.1 鏈表的結構

35、</p><p>  可以看到鏈表中各元素在內(nèi)存中可以不是連續(xù)存放的。要找到某一元素,必須先找到上一個元素,根據(jù)它提供的下一元素地址才能找到下一元素。如果不提供“頭指針”(head),則整個鏈表都無法訪問。</p><p><b>  2、鏈表的插入操作</b></p><p>  鏈表能夠方便地實現(xiàn)結點的插入操作,這也是鏈表結構具有動態(tài)分配存

36、儲空間的體現(xiàn),也是它優(yōu)于數(shù)組的地方之一。還是舉小朋友排隊的例子來說明鏈表的插入是怎樣實現(xiàn)的。在這個比喻里面,每一個小朋友相當于一個結點,一個小朋友的手拉著另一個小朋友的手,相當于一個結點的指針域指向下一個結點。如圖2.2.1假設現(xiàn)有一對按大小個排好隊的小朋友,又來一個小朋友“C”需要加入該隊列。這時候,他需要插入B于D兩個小朋友之間。然后,把這兩個小朋友的手分開,讓前一個小朋友的手該拉著新來小朋友的一只手,新來小朋友的另一只手拉著后一個

37、小朋友的一只手。這樣,新來的小朋友就被插入到這個隊伍里面了,并且這個隊伍的小朋友還是按照身高順序排列的,如圖2.2.2。實際鏈表的插入操作也就可以類似地實現(xiàn)。</p><p>  圖2.2.1 原來的隊伍</p><p>  圖2.2.2 C插入后的隊伍</p><p><b>  算法的C語言描述</b></p><p&g

38、t;  //在帶頭結點的單鏈線性表L中第i個位置之前插入元素e</p><p>  int ListInsert(LinkList *L,int i,ElemType e) </p><p>  { int j=0; </p><p>  LinkList p=*L,s; </p><p>  while(p && j&l

39、t;i-1) // 尋找第i-1個結點 </p><p>  { p=p->next; </p><p><b>  j++; </b></p><p><b>  } </b></p><p>  if(!p || j>i-1) // i小于1或者大于表長 </p>

40、;<p>  return 0; </p><p>  s=(LinkList)malloc(sizeof(struct LNode)); // 生成新結點 s->data=e插入L中 </p><p>  s->next=p->next; </p><p>  p->next=s; </p><p>

41、  return 1; </p><p><b>  } </b></p><p>  3、 鏈表的刪除操作</p><p>  還是舉小朋友排隊的例子來說明鏈表的刪除是怎樣實現(xiàn)的。在這個比喻里面,每一個小朋友相當于一個結點,一個小朋友的手拉著另一個小朋友的手,相當于一個結點的指針域指向下一個結點。如圖2.3.1假設現(xiàn)有一對按大小個排好隊的小朋

42、友,小朋友“C”需要離開該隊列。這時候,他需要讓前一個小朋友的手該拉著他后面小朋友的一只手,自己放開手。這樣,C小朋友就被從隊伍里面刪除了,并且這個隊伍的小朋友還是按照身高順序排列的,如圖2.3.2。實際鏈表的刪除操作也就可以類似地實現(xiàn)。</p><p>  圖2.3.2 C刪除前的隊伍</p><p>  圖2.3.2 C刪除后的隊伍</p><p><b&

43、gt;  算法的C語言描述</b></p><p>  // 在帶頭結點的單鏈線性表L中,刪除第i個元素,并由e返回其值 </p><p>  int ListDelete(LinkList *L, int i,ElemType *e)</p><p>  { int j = 0; </p><p>  LinkList p=*

44、L,q; </p><p>  while(p->next&&j<i-1) // 尋找第i個結點,并令p指向其前趨</p><p>  { p=p->next; </p><p><b>  j++; </b></p><p><b>  } </b><

45、;/p><p>  if(!p->next||j>i-1) // 刪除位置不合理 return 0; </p><p>  q=p->next; // 刪除并釋放結點 </p><p>  p->next=q->next; </p><p>  *e=q->data; </p><

46、p><b>  free(q); </b></p><p>  return 1; </p><p><b>  } </b></p><p><b>  4、單鏈表的特點</b></p><p>  鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始;鏈表是使

47、用指針進行構造的列表;又稱為結點列表,因為鏈表是由一個個結點組裝起來的;其中每個結點都有指針成員變量指列表中的下一個結點。</p><p><b>  設計的功能描述</b></p><p>  利用FlashBuilder軟件,制作一個動畫,完成鏈表的刪除、插入操作過程的演示。用戶可以通過點擊插入按鈕,進入到插入主頁面,頁面中提示用戶需要手動的輸入要插入的位置和數(shù)據(jù)

48、,輸入之后,點擊插入就可以觀看到整個插入過程,如果輸入節(jié)點和位置不正確也會出現(xiàn)相關的提醒,點擊確定按鈕,再重來。同樣的道理,用戶可以通過點擊刪除按鈕,進入到刪除的主頁面,頁面中提示用戶需要手動的輸入要刪除的位置,輸入之后,點擊插入就可以觀看到整個插入過程,如果輸入節(jié)點和位置不正確也會出現(xiàn)相關的提醒,點擊確定按鈕,再重來。</p><p><b>  四)設計思想</b></p>

49、<p>  利用MornBuilder編輯資源,發(fā)布代碼后,進入Flashbuilder軟件編輯代碼。實現(xiàn)插入,刪除動畫。ActionScript腳本語言得到完善,提供了按鈕和MC兩種可以出發(fā)事件的基本對象,使得我們做的動畫能夠?qū)崿F(xiàn)與用戶的交互。</p><p>  用戶與Flash動畫的交互體現(xiàn)在用戶能夠直接對動畫的播放進行控制和影響動畫的內(nèi)容。用戶對動畫的播放進程的控制是比較容易實現(xiàn)的,主要是借助

50、按鈕對象以及在按鈕上添加的動作語句來實現(xiàn)即可。但是要實現(xiàn)用戶對的輸入對動畫的影響必須考慮以下兩個問題:</p><p>  用戶控制動畫改變的權限不宜過大,也不可過小。如果過大的話,那么實現(xiàn)過程就很困難,但是過小則無法體現(xiàn)交互性。</p><p>  應該結合具體情況來制定相應的實現(xiàn)策略。固定的實現(xiàn)部分應采用模板組件或者庫構件等可重用元素實現(xiàn),來達到代碼重用和可移植的目的。</p&g

51、t;<p>  在本設計中,是通過按鈕按鍵來控制動畫的播放效果,鏈表的插入動畫中主要有三個按鈕,插入按鈕,重來按鈕和當插入地址越界時的提醒知道了按鈕。為按鈕添加Action Script控制動畫的播放,是在按鈕動作面板中添加相應的動作腳本來實現(xiàn)的。</p><p>  五)設計中的主要難點</p><p><b>  1、鼠標點擊事件</b></p

52、><p>  當點擊插入按鈕時,要完成插入動畫,當點擊刪除按鈕時,相應的進行刪除操作,當點擊退出時返回上層。</p><p><b>  2、指針的移動</b></p><p>  當點擊刪除或者插入按鈕時,如何自動生成節(jié)點,和調(diào)用什么函數(shù)能夠使指針的自動移動,以什么樣的速度移動,移動范圍。</p><p><b>

53、;  過程論述</b></p><p>  《數(shù)據(jù)結構》是計算機專業(yè)的重要課程之一,但是教學中普遍存在對算法理解上的困難,特別是以類C語言寫的算法程序過程復雜,難以掌握,在這樣一種情況下,本設計主要研究的是鏈表基本操作的動畫演示,它能夠幫助我們更直觀的理解鏈表的一些基本操作。體現(xiàn)多媒體教學的重要意義。</p><p>  目前的一些高校和教學網(wǎng)站,出現(xiàn)的類似算法動畫演示課件大多

54、可分為兩類:一類是采用專用語言,如C或JAVA來開發(fā),另一類則采用一些多媒體制作工 具來設計,如PowerPoint, Authorware 等.前者用程序設計語言來開發(fā),周圖 1 單鏈表的插入算法的動畫界面期長,成本大,難以推廣和維護;后者雖易開發(fā),易 使用,但因受其功能限制并不能制作出真正意義上的動畫影片.而通常上述方法開發(fā)出的可執(zhí)行文件尺寸較大,不宜于遠程網(wǎng)絡下的CAI教學.近年來,由于認識到Flash在制作網(wǎng)頁動畫中的突出性能,

55、也出現(xiàn)了許多利用其開發(fā)的教學課件, 不 過這些教學課件通常只利用了Flash 的動畫制作能力,并未充分挖掘和實現(xiàn) Action Script 腳本的強大控制功能,所實現(xiàn)的均是同一種動畫流程的播放: 即動畫過程不能交互改變,動畫內(nèi)容在反復播放中也不能有所變化.</p><p>  本文介紹的《數(shù)據(jù)結構》中的鏈表操作動畫演示課件利用了ActionScript腳本編程的控制功能,來實現(xiàn)動畫與用戶的交互。這個動畫不緊需要

56、我們了解鏈表基本操作的過程,而且需要將這個過程通過動畫形象生動地表現(xiàn)出來,并實現(xiàn)與用戶的交互性,使學者對算法過程得到全面深刻的理解。</p><p>  下面以《數(shù)據(jù)結構》鏈表的插入和刪除算法動畫為例,說明其具體實現(xiàn)過程和步驟。</p><p>  一)平臺搭建和初步準備工作</p><p><b>  1、環(huán)境要求</b></p>

57、<p>  Windows Xp以上 cpu 1g 內(nèi)存2g</p><p><b>  2、準備工具</b></p><p>  編程工具:flashbuilder4.6</p><p>  素材編輯工具:Morn Builder</p><p>  類庫swc:greensock.swc和MornUI

58、Lib.swc</p><p><b>  圖片資源:略</b></p><p><b>  3、創(chuàng)建項目</b></p><p>  打開flashbuilder-->文件-->新建actionscript項目-->項目名寫入zuoye-->文件夾 d:/ -->應用程序類型選擇web(在A

59、dobe Flash Player中運行)-->Flex SDk版本選擇 使用flex4.6.0-->下一步-->添加swc 把準備的greensock.swc和MornUILib.swc添加進來-->完成</p><p><b>  4、編輯資源</b></p><p>  打開Morn Builder-->項目-->新建項目--

60、>項目名稱-->寫上Zuoye-->項目位置瀏覽到你剛才用flashbuilder新建項目的根目錄下-->確定</p><p>  將你準備的圖片資源導入到 項目根目錄\morn\assets\comp下-->刷新資源列表</p><p>  頁面-->新建頁面-->寬高設置為750*550,新建Main、Insert、Delete、Cell、U

61、pArrow這幾個頁面,主界面見圖示3.1</p><p><b>  圖3.1</b></p><p>  插入操作界面如圖3.2</p><p><b>  圖3.2</b></p><p>  刪除操作界面如圖3.3</p><p><b>  圖3.3<

62、;/b></p><p><b>  Cell如圖3.4</b></p><p><b>  圖3.4</b></p><p>  UpArrow如圖3.5</p><p><b>  圖3.5</b></p><p><b>  動畫實

63、現(xiàn)</b></p><p>  除了主類ZuoYe.as已存在,另外還要新建其他幾個類</p><p>  MainView.as 對插入按鈕和刪除按鈕進行控制,點擊插入按鈕進入“單鏈表節(jié)點的插入”界面,點擊刪除按鈕進入“單鏈表節(jié)點的刪除”界面</p><p>  InsertView.as 此為“單鏈表節(jié)點的插入”界面</p><

64、p>  DeleteView.as此為“單鏈表節(jié)點的刪除”界面</p><p>  CellView.as 此為單元鏈表界面</p><p>  UpArrowView.as 此為向上箭頭的界面</p><p>  主類ZuoYe.as中先初始化整個項目</p><p>  App.init(this); //啟動項目</p&g

65、t;<p>  App.loader.loadAssets(["assets/comp.swf"],new Handler(loaded),new Handler(loading)); </p><p>  在資源加載完成事件中添加顯示對象MainView</p><p>  view=new MainView();//新建主界面</p>&

66、lt;p>  addChild(view); //在舞臺上加載主界面</p><p><b>  1、主界面代碼設計</b></p><p>  MainView.as中先初始化并為InsertView類和DeleteView類實例化對象,然后為兩個按鈕添加鼠標click事件,以達到點擊按鈕進入某個界面的效果。</p><p><b

67、>  核心代碼如下:</b></p><p>  override protected function initialize():void</p><p><b>  {</b></p><p>  view_insert=new InsertView();//新建一個插入視圖</p><p>  a

68、ddChild(view_insert);//把插入視圖添加到主界面中</p><p>  view_delete=new DeleteView();//新建一個刪除操作</p><p>  addChild(view_delete);//把刪除視圖添加到主界面中</p><p>  view_insert.visible=view_delete.visible=f

69、alse;//設置初始可見度</p><p>  view_insert.addEventListener(ChildClassEvent.Back,showSth);//為插入視圖添加按鈕點擊事件 view_delete.addEventListener(ChildClassEvent.Back,showSth);//為刪除視圖添加按鈕點擊事件</p><p>  btn_1.

70、addEventListener(MouseEvent.CLICK,onClicked);</p><p>  btn_2.addEventListener(MouseEvent.CLICK,onClicked);</p><p><b>  }</b></p><p>  2、插入操作代碼設計</p><p>  (1

71、)在InsertView.as初始化方法中對元件初始化</p><p><b>  核心代碼如下:</b></p><p>  for(var i;int i=0;i<5;i++){</p><p>  arrArrow.push(this[“arrow_”+i]); //將五個箭頭push到arrArrow數(shù)組中</p>

72、<p><b>  }</b></p><p>  arrow_up.scaleX=0; //設置朝上箭頭元件為0</p><p>  arrow_p.visible=false; //設置指針元件不可見</p><p>  btn_insert.addEventListener(MouseEvent.CLICK.onClicked)

73、;</p><p>  btn_redo.addEventListener(MouseEvent.CLICK.onClicked);</p><p>  btn_return.addEventListener(MouseEvent.CLICK.onClicked);</p><p>  timer.addEventListener(TimeEvent.TIMER.o

74、nTimer); timer.addEventListener(TimeEvent.TIMER_COMPLETE.timerCompleteEvent);</p><p>  在鼠標事件方法中對插入按鈕作相應效果,如果點擊插入按鈕,就進行指針的動畫過程,如果點擊重來按鈕,就重新返回插入的主界面。</p><p><b>  核心代碼如下:</b></p>

75、;<p>  switch(e.target)</p><p><b>  {</b></p><p>  case btn_insert:</p><p>  doAction();//播放動畫</p><p><b>  break;</b></p><p>

76、;  case btn_redo: //當按下“重來”按鈕時,初始化整個舞臺</p><p>  timeLineLite.kill();//停止播放器</p><p>  icon.alpha=1; //設置角元件為可見</p><p>  arrow_up.scaleX=0; //設置朝上箭頭的水平比例為0</p><p>  arrow

77、_p.x=arrPosX_arrow_p[0]; //初始化指針的坐標</p><p>  arrow_p.visible=false; //設置指針為不可見</p><p>  input_1.text=input_2.text="";//清空輸入框文本</p><p>  if (index<5) </p><p&g

78、t;<b>  {</b></p><p>  arrArrow[index].rotation=0; //初始化箭頭角度</p><p>  arrArrow[index].scaleX=1; //初始化箭頭比例</p><p><b>  }</b></p><p>  if(contains(

79、cell))removeChild(cell); //清除鏈表單元</p><p>  btn_insert.mouseEnabled=btn_return.mouseEnabled=true; //設置按鈕為可用</p><p><b>  break;</b></p><p>  case btn_return:</p>&l

80、t;p>  visible=false; //隱藏Insert界面dispatchEvent(newChildClassEvent(ChildClassEvent.Back)); //派發(fā)返回主界面事件</p><p><b>  break;</b></p><p><b>  default:</b></p>&l

81、t;p><b>  break;</b></p><p>  鼠標點擊之后,對插入的地址做出相應的判斷,如果地址小于5,使用appen函數(shù)指針做出緩動,生成一個節(jié)點,完成插入過程。</p><p><b>  核心代碼:</b></p><p>  private function timerCompleteEve

82、nt(e:TimerEvent):void</p><p><b>  {</b></p><p>  cell.alpha=1; //設置鏈表單元透明度為最大</p><p>  timeLineLite=new TimelineLite();//創(chuàng)建播放器實例</p><p>  timeLineLite.appen

83、d(new TweenLite(cell,2,{y:PosY_cell}));//鏈表單元從存儲池下降到這個位置</p><p>  timeLineLite.append(newTweenLite(cell,index*1,{x:arrPosX_cell[--index]})); //鏈表單元左移</p><p>  if (index<5) </p><p&g

84、t;<b>  {</b></p><p>  timeLineLite.append(new TweenLite(cell.arrow,2,{scaleX:1}));//設置鏈表單元箭頭的水平比例為1</p><p>  timeLineLite.append(new TweenLite(arrArrow[index],2,{scaleX:0,onComplete:

85、function():void{(arrArrow[index] as Image).rotation=-90}}));//將鏈表單元的箭頭角度改為-90,使其朝上</p><p>  timeLineLite.append(new TweenLite(arrArrow[index],2,{scaleX:1}));//設置前一個鏈表箭頭的水平比例為1</p><p><b>  

86、}</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  timeLineLite.append(new TweenLite(cell.icon,1,{alpha:1}));</p><p>  //設置鏈表單元角的透明度為最大

87、</p><p>  timeLineLite.append(new TweenLite(icon,1,{alpha:0}));</p><p>  //設置前一個鏈表角的透明度為最小</p><p>  timeLineLite.append(new TweenLite(arrow_up,2,{scaleX:1}));</p><p>  

88、//設置朝上箭頭的水平比例為最大</p><p><b>  }</b></p><p><b>  }</b></p><p>  3、 刪除操作的代碼設計</p><p> ?。?)界面初始化,在InsertView.as初始化方法中對元件初始化,生成各節(jié)點</p><p&

89、gt;  核心代碼如下:for (var j:int = 0; j < arrCell.length; j++) </p><p><b>  {</b></p><p>  cell=arrCell[j];//存儲五個鏈表單元的引用</p><p>  cell.txt.text="a"+String(j+1);//

90、初始化五個鏈表單元的文本內(nèi)容</p><p>  cell.icon.visible=j>2;//后面兩個鏈表單元的角元件可見</p><p>  if(j==3)cell.icon.alpha=0;//第四個鏈表單元的角設為透明</p><p>  cell.arrow.visible=cell.img.visible=false;//隱藏鏈表單元不相關的元

91、件</p><p>  cell.arrow_right.visible=j!=4;//設置最后一個鏈表單元的箭頭為可見</p><p><b>  }</b></p><p>  btn_delete.addEventListener(MouseEvent.CLICK,onClicked);</p><p>  btn

92、_recome.addEventListener(MouseEvent.CLICK,onClicked);</p><p>  btn_return.addEventListener(MouseEvent.CLICK,onClicked);</p><p>  timer.addEventListener(TimerEvent.TIMER,onTimer);</p><

93、p>  timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerCompleteEvent);</p><p> ?。?)在鼠標事件方法中對插入按鈕作相應效果,如果點擊刪除按鈕,則進行指針動作,完成刪除動畫。如果點擊重來按鈕,返回到主刪除界面。</p><p><b>  核心代碼如下:</b></p&g

94、t;<p>  private function onClicked(e:MouseEvent):void</p><p><b>  {</b></p><p>  switch(e.target)</p><p><b>  {</b></p><p>  case btn_del

95、ete:</p><p>  doAction();//播放動畫</p><p><b>  break;</b></p><p>  case btn_recome:</p><p>  var a:Array=[,0,1,2,3,4];//設置索引器</p><p>  timeLinelit

96、e.kill();//停止播放器的工作</p><p>  arrow_P.visible=false;//隱藏指針</p><p>  arrow_P.x=arrPosX_arrow_P[0];//初始化指針坐標</p><p>  arrow_curve.scaleX=0;//初始化彎曲箭頭的水平比例</p><p>  if(index

97、>1)(arrCell[a[index-1]] as CellUI).arrow_right.scaleX=1;//初始化鏈表單元朝右箭頭的水平比例</p><p>  (arrCell[a[index]] as CellUI).arrow_right.scaleX=1;//設置鏈表單元右箭頭的水平比例</p><p>  (arrCell[a[index]] as CellUI).

98、alpha=1;// /設置鏈表單元右箭頭的透明度</p><p>  (arrCell[a[index]] as CellUI).x=arrPosX_cell[a[index]];//初始化X坐標</p><p>  (arrCell[a[index]] as CellUI).y=146; //初始化Y坐標</p><p>  (arrCell[a[index]]

99、 as CellUI).txt.alpha=1;//顯示鏈表單元文本內(nèi)容</p><p>  container.alpha=1;//設置容器的透明度</p><p>  container.scaleY=0;// 設置容器的水平比例</p><p>  container.y=228; // 設置容器的Y坐標</p><p>  arrow

100、_0.scaleX=1;//初始化第一個鏈表單元的水平比例</p><p>  btn_delete.mouseEnabled=btn_return.mouseEnabled=true;</p><p><b>  //將按鈕設為可用</b></p><p><b>  break;</b></p><

101、p>  case btn_return:</p><p>  visible=false;//設置當前界面不可見</p><p>  dispatchEvent(new ChildClassEvent(ChildClassEvent.Back));//派發(fā)返回主界面事件</p><p><b>  break;</b></p>

102、<p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)指針移動動畫實現(xiàn):</p>

103、<p>  private function timerCompleteEvent(e:TimerEvent):void</p><p><b>  {</b></p><p>  var a1:Array=[,,0,1,2,3,4];//前一個單元鏈表的索引(對要移除的單元鏈表而言)</p><p>  var a2:Array

104、=[,0,1,2,3,4];//要移除的單元鏈表的索引 </p><p>  var offsetPoint:Point=new Point();</p><p>  timeLinelite=new TimelineLite();//創(chuàng)建播放器</p><p>  container.x=arrPosX_container[a2[index]];//初始化容器的坐

105、標</p><p>  offsetPoint.x=container.x-arrCell[a2[index]].x;//設定箭頭容器的x坐標(要移除的單元鏈表下面的)</p><p>  offsetPoint.y=container.y-arrCell[a2[index]].x-24;</p><p>  timeLinelite.append(new Twee

106、nLite(container,2,{scaleY:1}));</p><p>  if(index==5)timeLinelite.append(new TweenLite((arrCell[a2[index]] as CellUI).icon,1,{alpha:0}));//最后一個單元鏈表的角消失</p><p>  if (index==1) </p><p&g

107、t;<b>  {</b></p><p>  timeLinelite.append(new TweenLite(arrow_0,2,{scaleX:0}));//如果移除的是第一個單元鏈表 將前面棕色的單元鏈表的指向右的箭頭縮短</p><p><b>  }</b></p><p><b>  else&l

108、t;/b></p><p><b>  {</b></p><p>  timeLinelite.append(new TweenLite((arrCell[a1[index]] as CellUI).arrow_right,2,{scaleX:0}));</p><p><b>  }</b></p>

109、<p>  if(index==5)timeLinelite.append(new TweenLite((arrCell[a1[index]] as CellUI).icon,1,{alpha:1}));//倒數(shù)第二個單元鏈表的角顯示</p><p>  if(index!=5)timeLinelite.append(new TweenLite(arrow_curve,2,{scaleX:1,onSt

110、art:function():void{arrow_curve.x=arrPosX_curveArrow[index]}}));//上面那個大的彎曲的箭頭伸展 </p><p>  if(index!=5)timeLinelite.append(new TweenLite((arrCell[a2[index]] as CellUI).arrow_right,2,{scaleX:0}));//除最后一個其他的單元鏈

111、表指向右的箭頭縮短</p><p>  timeLinelite.appendMultiple([new TweenLite(arrCell[a2[index]],1,{y:PosY}),new TweenLite(container,1,{y:PosY+78})]);}//要移除的單元鏈表連同下面黃色彎曲的箭頭一起向下移動</p><p>  timeLinelite.appendMul

112、tiple([new TweenLite(arrCell[a2[index]],2,{alpha:0,y:389}),new TweenLite((arrCell[a2[index]] as CellUI).txt,0.5,{alpha:0}),new TweenLite(container,2,{alpha:0,y:389+78})]);//要移除的單元鏈表連同下面黃色彎曲的箭頭一起向

113、下移動至存儲池</p><p><b>  動畫運行</b></p><p>  在2位置插入數(shù)據(jù)為5的節(jié)點之后,我們能夠觀看到的動畫是插入節(jié)點的指針先指向a2節(jié)點,a1的后繼指向插入節(jié)點,整個插入操作就完成了,完成后的界面如圖3.6</p><p><b>  圖3.6</b></p><p> 

114、 刪除第三個位置上的節(jié)點,首先P指針找到第二個節(jié)點,然后a2的后繼指向它后繼的后繼,刪除后的節(jié)點進入存儲池,整個刪除操作完成之后的界面如圖3.7</p><p><b>  圖3.7</b></p><p>  四、存在的問題和不足</p><p>  在整體設計中,界面設計不是那么美觀,有待改進。</p><p>  

115、動畫中沒能實現(xiàn)聲音功能,在教學演示中如果邊演示動畫邊有聲音播放,對于理解會有很大的幫助,由于本次設計時間和能力有限,未能夠?qū)崿F(xiàn)這部分的功能。</p><p>  當插入的位置越界時,沒有提醒插入位置不正確提示框彈出。</p><p>  只能進行一次性的插入和刪除操作。</p><p><b>  五、結語</b></p><

116、;p>  教學動畫的制作仍有不足的地方,但經(jīng)過這次的設計,我學會了如何獨立的進行</p><p>  一個動畫設計,了解了常見的圖形和動畫程序的實現(xiàn)方法,并且實現(xiàn)了鏈表基本操作的動畫演示,在此期間無論是對ActionScript腳本編程還是對數(shù)據(jù)結構都有了更深的理解,編程能力有了很大的提高,對于MornBuilder和FlashBuilder軟件的使用更加的熟悉。在設計的過程中遇到過很多問題,比如安裝Mor

117、nBuilder時不能正常運行,需要安裝Java之后才能正常運行,timeLinelite類中的append、insert等方法是使用不是太會,這些問題都是以前沒有遇到過的,通過查閱書籍和詢問同學老師解決,這次的畢業(yè)設計進行的時間比較長,主要是因為對于as3.0語言不太熟悉,并且沒有用過FlashBuilder軟件,但最終還是設計出來了。本論文對于鏈表操作的動畫演示在教學中能夠幫助我們更好的學習數(shù)據(jù)結構,在未來的教學過程中會有很大的發(fā)展

118、前景,作者會對其繼續(xù)研究和探討,相信在未來還可以做得更好。此類動畫演示必將隨著自身技術和設計上的更大的進步,展現(xiàn)出更為廣闊的前景和未來。</p><p><b>  六、謝辭</b></p><p>  在本論文的寫作過程中,遇到過很多問題,比如,鏈表操作演示動畫用哪種軟件設計,開始繞了很多彎路,后來確定用FlashBuilder做之后進行得也不太順利,對于Actio

119、nScript腳本語言的不熟悉,也使得畢業(yè)設計進行的比較慢,在這樣一種情況下,多虧指導老師吳海濤對我的詳細指導和耐心溝通,使得我能夠比較順利地完成本次的畢業(yè)設計,無論是從選題到開題報告,還是從寫作提綱到一遍又一遍的指出每稿中的具體問題指導老師都給予了我非常大的幫助,指導老師的嚴格把關,循循善誘,嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,深深地感染和激勵著我。沒有這樣的關心幫助和熏陶,我是不會這么順利地完成畢業(yè)設計,在此我向吳海

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論