版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JIANGXINORMALUNIVERSITYJIANGXINORMALUNIVERSITY本科生畢業(yè)設(shè)計(jì)(論文)中文題目學(xué)號(hào) 姓名學(xué)院指導(dǎo)老師專(zhuān)業(yè)計(jì)算機(jī)完成時(shí)間2010.04.14摘要小游戲是一個(gè)較模糊的概念,它是相對(duì)于體積龐大的單機(jī)游戲及網(wǎng)絡(luò)游戲而言的,泛指所有體積較小、玩法簡(jiǎn)單的游戲,通常這類(lèi)游戲以休閑益智類(lèi)為主,有單機(jī)版有網(wǎng)頁(yè)版,在網(wǎng)頁(yè)上嵌入的多為FLASH格式。當(dāng)下小游戲主要是指在線玩的flash版本游戲,統(tǒng)稱小游戲,其實(shí)小游戲還包含單機(jī)游戲,小型游戲機(jī)等。一般游戲大小小于10m的游戲都統(tǒng)稱為小游戲,一些街機(jī)類(lèi)小游戲。如植物大戰(zhàn)僵尸,合金彈頭等歸納其中,引起游戲安裝簡(jiǎn)便,耐玩性強(qiáng),無(wú)依賴性而廣受白領(lǐng)及小朋友的喜愛(ài)。本游戲是用FLASH做的叫做舒爾特方格的小游戲。舒爾特方格是在一張方形卡片上畫(huà)上1CM×1CM的25個(gè)方格,格子內(nèi)任意填寫(xiě)上阿拉伯?dāng)?shù)字1—25的共25個(gè)數(shù)字。訓(xùn)練時(shí),要求被測(cè)者用手指按1—25的順序依次指出其位置,同時(shí)誦讀出聲,施測(cè)者一旁記錄所用時(shí)間。數(shù)完25個(gè)數(shù)字所用時(shí)間越短,注意力水平越高。本游戲稍微改進(jìn)了點(diǎn),可以測(cè)試玩家9格,16格,25格,36格,49格和64格的水平。本游戲采用的編程語(yǔ)言是ActionScript3.0。ActionScript動(dòng)作腳本是遵循ECMAscript第四版的AdobeFlashPlayer運(yùn)行時(shí)環(huán)境的編程語(yǔ)言。它在Flash內(nèi)容和應(yīng)用程序中實(shí)現(xiàn)交互性、數(shù)據(jù)處理以及其他功能。ActionScript是Flash的腳本語(yǔ)言,與JavaScript相似,ActionScript是一種面向?qū)ο缶幊陶Z(yǔ)言。關(guān)鍵詞:小游戲,舒爾特方格,F(xiàn)LASH,ActionScript3.0。畢業(yè)論文聲明本人鄭重聲明:1.此畢業(yè)論文是本人在指導(dǎo)教師指導(dǎo)下獨(dú)立進(jìn)行研究取得的成果。除了特別加以標(biāo)注地方外,本文不包含其他人或其它機(jī)構(gòu)已經(jīng)發(fā)表或撰寫(xiě)過(guò)的研究成果。對(duì)本文研究做出重要貢獻(xiàn)的個(gè)人與集體均已在文中作了明確標(biāo)明。本人完全意識(shí)到本聲明的法律結(jié)果由本人承擔(dān)。2.本人完全了解學(xué)校、學(xué)院有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校與學(xué)院保留并向國(guó)家有關(guān)部門(mén)或機(jī)構(gòu)送交此論文的復(fù)印件和電子版,允許此文被查閱和借閱。本人授權(quán)江西師范大學(xué)政法學(xué)院可以將此文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本文。3.若在江西師范大學(xué)政法學(xué)院畢業(yè)論文審查小組復(fù)審中,發(fā)現(xiàn)本文有抄襲,一切后果均由本人承擔(dān),與畢業(yè)論文指導(dǎo)老師無(wú)關(guān)。學(xué)位論文作者(簽名):年月日PAGE52目錄摘要 1第1章引言 2HYPERLINK1.1舒爾特方格詳細(xì)信息 4HYPERLINK1.2游戲設(shè)計(jì)意義以及原因 5HYPERLINK2.1ActionScript3.0技術(shù)概述 6HYPERLINK2.2面向?qū)ο?8HYPERLINK2.3FlashCS4軟件介紹 10HYPERLINK2.4FlashDevelop軟件介紹與配置 12HYPERLINK第3章游戲開(kāi)發(fā)的詳細(xì)過(guò)程 16HYPERLINK3.1游戲功能的設(shè)計(jì) 16HYPERLINK3.2游戲界面的設(shè)計(jì) 17HYPERLINK第4章游戲代碼編寫(xiě) 19HYPERLINK4.1制作方格類(lèi) 19HYPERLINK4.2計(jì)時(shí)器的制作 24HYPERLINK4.3制作看板 26HYPERLINK4.6主類(lèi)的設(shè)計(jì) 41HYPERLINK4.7細(xì)節(jié)的完善 46HYPERLINK4.8編寫(xiě)代碼的小結(jié) 49HYPERLINK第5章小結(jié) 51HYPERLINK參考文獻(xiàn) 52HYPERLINK致謝 53第1章引言1.1舒爾特方格詳細(xì)信息以7—12歲年齡組為例,能達(dá)到26"以上為優(yōu)秀,學(xué)習(xí)成績(jī)應(yīng)是名列前茅,42"屬于中等水平,班級(jí)排名會(huì)在中游或偏下,50"則問(wèn)題較大,考試會(huì)出現(xiàn)不及格現(xiàn)象。18歲及以上成年人最好可達(dá)到8"的水平,25"為中等水平。舒爾特方格”不但可以簡(jiǎn)單測(cè)量注意力水平,而且是很好的訓(xùn)練方法。又是心理咨詢師進(jìn)行心理治療時(shí)常用的基本方法。舒爾特表可以通過(guò)動(dòng)態(tài)的練習(xí)鍛煉視神經(jīng)末梢。心理學(xué)上用此表來(lái)研究和發(fā)展心理感知的速度,其中包括視覺(jué)定向搜索運(yùn)動(dòng)的速度。培養(yǎng)注意力集中、分配、控制能力;拓展視幅;加快視頻;提高視覺(jué)的穩(wěn)定性、辨別力、定向搜索能力。練習(xí)的時(shí)間越長(zhǎng),看表所需的時(shí)間會(huì)越短。隨著練習(xí)的深入,眼球的末梢視覺(jué)能力提高,不僅初學(xué)者可以有效地拓展視幅,加快閱讀節(jié)奏,鍛煉眼睛快速認(rèn)讀;而且對(duì)于進(jìn)入提高階段之后,同時(shí)拓展縱橫視幅,達(dá)到一目十行、一目一頁(yè)非常有效。每表按字符順序,迅速找全所有的字符,平均1個(gè)字符用1秒鐘成績(jī)?yōu)閮?yōu)良,即9格用9秒、16格用16秒、25格用25秒。練習(xí)開(kāi)始,達(dá)到不標(biāo)準(zhǔn)是非常正常的,切莫急躁。應(yīng)該從9格開(kāi)始練起。感覺(jué)熟練或比較輕松達(dá)到要求之后,再逐漸增加難度,千萬(wàn)不要因急于求成而使學(xué)習(xí)熱情受挫。視野較寬、注意力參數(shù)較高的讀者,可以從25格開(kāi)始練習(xí)。如果有興趣繼續(xù)提高練習(xí)的難度,還可以自己制作36格、49格、64格、81格的表。為了避免反復(fù)用相同的表產(chǎn)生記憶,你可以自己動(dòng)手制作不同難度、不同排序的舒爾特表,規(guī)格大致為邊長(zhǎng)20厘米的正方形,1套制作10張表。漢字一定要選擇自己熟悉的文字。①眼睛距表30~35厘米,視點(diǎn)自然放在表的中心;②在所有字符全部清晰入目的前提下,按順序(1~9,A~I(xiàn),漢字應(yīng)先熟悉原文順序)找全所有字符,注意不要顧此失彼,因找一個(gè)字符而對(duì)其他字符視而不見(jiàn);③每看完一個(gè)表,眼睛稍做休息,或閉目,或做眼保健操,不要過(guò)分疲勞;④練習(xí)初期不考慮記憶因素。每天看10個(gè)表。1.2游戲設(shè)計(jì)意義以及原因當(dāng)時(shí)其實(shí)只是想要做這個(gè)游戲,但是沒(méi)有想用什么做。不過(guò)恰好,這段時(shí)間在研究FLASH,F(xiàn)LASH里有自帶的編程腳本語(yǔ)言ActionScript3.0。是一門(mén)面向?qū)ο笳Z(yǔ)言,又不像C++那么復(fù)雜,于是乎就順手用FLASH寫(xiě)了。這個(gè)游戲呢分幾種不同的階段,有容易,簡(jiǎn)單,一般,困難,很難,相當(dāng)難幾種。其實(shí)就是9格,16格,25格,36格,49格,64格的不同版本的舒爾特方格。這個(gè)游戲的靈感來(lái)源于網(wǎng)上一FLASH達(dá)人所寫(xiě)的一個(gè)小游戲,但是他沒(méi)放出源代碼,于是乎,興之所至,就隨手做了一個(gè)這樣的自?shī)首詷?lè)的小游戲。主要的界面和美工是參考網(wǎng)上的,代碼和實(shí)現(xiàn)方式卻是完完全全自己構(gòu)思和獨(dú)立創(chuàng)作的。但是限于水平,做的還是不怎么樣,代碼也是亂七八糟的,沒(méi)有面向?qū)ο笳Z(yǔ)言的精髓在里面。這游戲說(shuō)真的呢,還是有點(diǎn)用的。畢竟網(wǎng)上也都有很多說(shuō)舒爾特方格的好處了。玩多了,對(duì)自己的大局觀,視野,記憶力,注意力都是有很大的幫助的,也可以在學(xué)習(xí),工作之余放松下。可謂是居家旅行,工作學(xué)習(xí)必備小游戲。第2章游戲開(kāi)發(fā)的技術(shù)基礎(chǔ)2.1ActionScript3.0技術(shù)概述ActionScript是針對(duì)AdobeFlashPlayer運(yùn)行時(shí)環(huán)境的編程語(yǔ)言,它在Flash內(nèi)容和應(yīng)用程序中實(shí)現(xiàn)了交互性、數(shù)據(jù)處理以及其它許多功能。ActionScript是由FlashPlayer中的ActionScript虛擬機(jī)(AVM)來(lái)執(zhí)行的。ActionScript代碼通常被編譯器編譯成"字節(jié)碼格式"(一種由計(jì)算機(jī)編寫(xiě)且能夠?yàn)橛?jì)算機(jī)所理解的編程語(yǔ)言),如AdobeFlashCS3Professional或Adobe®Flex?Builder?的內(nèi)置編譯器或Adobe®Flex?SDK和Flex?DataServices中提供的編譯器。字節(jié)碼嵌入SWF文件中,SWF文件由運(yùn)行時(shí)環(huán)境FlashPlayer執(zhí)行。ActionScript3.0提供了可靠的編程模型,具備面向?qū)ο缶幊痰幕局R(shí)的開(kāi)發(fā)人員對(duì)此模型會(huì)感到似曾相識(shí)。ActionScript3.0中的一些主要功能包括:一個(gè)新增的ActionScript虛擬機(jī),稱為AVM2,它使用全新的字節(jié)碼指令集,可使性能顯著提高一個(gè)更為先進(jìn)的編譯器代碼庫(kù),它更為嚴(yán)格地遵循ECMAScript(ECMA262)標(biāo)準(zhǔn),并且相對(duì)于早期的編譯器版本,可執(zhí)行更深入的優(yōu)化一個(gè)擴(kuò)展并改進(jìn)的應(yīng)用程序編程接口(API),擁有對(duì)對(duì)象的低級(jí)控制和真正意義上的面向?qū)ο蟮哪P鸵环N基于即將發(fā)布的ECMAScript(ECMA-262)第4版草案語(yǔ)言規(guī)范的核心語(yǔ)言一個(gè)基于ECMAScriptforXML(E4X)規(guī)范(ECMA-357第2版)的XMLAPI。E4X是ECMAScript的一種語(yǔ)言擴(kuò)展,它將XML添加為語(yǔ)言的本機(jī)數(shù)據(jù)類(lèi)型。一個(gè)基于文檔對(duì)象模型(DOM)第3級(jí)事件規(guī)范的事件模型ActionScript3.0的腳本編寫(xiě)功能超越了ActionScript的早期版本。它旨在方便創(chuàng)建擁有大型數(shù)據(jù)集和面向?qū)ο蟮目芍赜么a庫(kù)的高度復(fù)雜應(yīng)用程序。雖然ActionScript3.0對(duì)于在AdobeFlashPlayer9中運(yùn)行的內(nèi)容并不是必需的,但它使用新型的虛擬機(jī)AVM2實(shí)現(xiàn)了性能的改善。ActionScript3.0代碼的執(zhí)行速度可以比舊式ActionScript代碼快10倍。舊版本的ActionScript虛擬機(jī)AVM1執(zhí)行ActionScript1.0和ActionScript2.0代碼。為了向后兼容現(xiàn)有內(nèi)容和舊內(nèi)容,F(xiàn)lashPlayer9支持AVM1。雖然ActionScript3.0包含ActionScript編程人員所熟悉的許多類(lèi)和功能,但ActionScript3.0在架構(gòu)和概念上是區(qū)別于早期的ActionScript版本的。ActionScript3.0中的改進(jìn)部分包括新增的核心語(yǔ)言功能,以及能夠更好地控制低級(jí)對(duì)象的改進(jìn)FlashPlayerAPI。ActionScript程序是一個(gè)指令的集合,它將被FlashPlayer,AdobeAIR或者FlashLite執(zhí)行。ActionScript程序可以用文本編輯器,F(xiàn)lexBuilder或者Flashauthoringtool編寫(xiě)。為了運(yùn)行一個(gè)ActionScript程序,我們必須首先使用SWF編譯器把它編譯為一個(gè).swf文件。ActionScript3.0大體上我們可以看成是一個(gè)JAVA語(yǔ)法規(guī)則十分之像。如果有JAVA或者C++基礎(chǔ)的話,學(xué)習(xí)ActionScript3.0將會(huì)十分迅速。沒(méi)有的話也不用著急,書(shū)哪里都有,就怕你不學(xué)。比如《ActionScript3.0編程精髓》《Makingthingsmove》是兩本十分好的書(shū)。我就是看這兩本書(shū)來(lái)學(xué)習(xí)ActionScript的。好了,上面講的是一些ActionScript的基本概念。現(xiàn)在我們編寫(xiě)一個(gè)ActionScript程序還需要對(duì)面向?qū)ο笥兴私?。畢竟ActionScript是一門(mén)面向?qū)ο缶幊陶Z(yǔ)言。 2.2面向?qū)ο竺嫦驅(qū)ο?ObjectOriented,OO)是當(dāng)前計(jì)算機(jī)界關(guān)心的重點(diǎn),它是90年代軟件開(kāi)發(fā)的主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā),擴(kuò)展到很寬的范圍。如數(shù)據(jù)庫(kù)系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。談到面向?qū)ο?,這方面的文章非常多。但是,明確地給出對(duì)象的定義或說(shuō)明對(duì)象的定義的非常少——至少我現(xiàn)在還沒(méi)有發(fā)現(xiàn)。起初,“面向?qū)ο蟆笔菍?zhuān)指在程序設(shè)計(jì)中采用封裝、繼承、抽象等設(shè)計(jì)方法??墒牵@個(gè)定義顯然不能再適合現(xiàn)在情況。面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開(kāi)發(fā)的各個(gè)方面。如,面向?qū)ο蟮姆治觯∣OA,ObjectOrientedAnalysis),面向?qū)ο蟮脑O(shè)計(jì)(OOD,ObjectOrientedDesign)、以及我們經(jīng)常說(shuō)的面向?qū)ο蟮木幊虒?shí)現(xiàn)(OOP,ObjectOrientedProgramming)。許多有關(guān)面向?qū)ο蟮奈恼露贾皇侵v述在面向?qū)ο蟮拈_(kāi)發(fā)中所需要注意的問(wèn)題或所采用的比較好的設(shè)計(jì)方法。看這些文章只有真正懂得什么是對(duì)象,什么是面向?qū)ο?,才能最大程度地?duì)自己有所裨益。這一點(diǎn),恐怕對(duì)初學(xué)者甚至是從事相關(guān)工作多年的人員也會(huì)對(duì)它們的概念模糊不清。首先我們要了解下傳統(tǒng)開(kāi)發(fā)方法的問(wèn)題。其一,軟件重用性差。重用性是指同一事物不經(jīng)修改或稍加修改就可多次重復(fù)使用的性質(zhì)。軟件重用性是軟件工程追求的目標(biāo)之一。其二,是軟件的可維護(hù)性差。軟件工程強(qiáng)調(diào)軟件的可維護(hù)性,強(qiáng)調(diào)文檔資料的重要性,規(guī)定最終的軟件產(chǎn)品應(yīng)該由完整、一致的配置成分組成。在軟件開(kāi)發(fā)過(guò)程中,始終強(qiáng)調(diào)軟件的可讀性、可修改性和可測(cè)試性是軟件的重要的質(zhì)量指標(biāo)。實(shí)踐證明,用傳統(tǒng)方法開(kāi)發(fā)出來(lái)的軟件,維護(hù)時(shí)其費(fèi)用和成本仍然很高,其原因是可修改性差,維護(hù)困難,導(dǎo)致可維護(hù)性差。其三是開(kāi)發(fā)出的軟件不能滿足客戶需求。用傳統(tǒng)的結(jié)構(gòu)化方法開(kāi)發(fā)大型軟件系統(tǒng)涉及各種不同領(lǐng)域的知識(shí),在開(kāi)發(fā)需求模糊或需求動(dòng)態(tài)變化的系統(tǒng)時(shí),所開(kāi)發(fā)出的軟件系統(tǒng)往往不能真正滿足用戶的需要。傳統(tǒng)的方法不能構(gòu)建出很好的程序,這個(gè)時(shí)候就要用面向?qū)ο罅?。這里先說(shuō)下面向?qū)ο蟮幕靖拍?。我們舉個(gè)例子來(lái)說(shuō),假如你想自己從頭開(kāi)始建造一架飛機(jī),那么你首先要做什么?我想應(yīng)該是先畫(huà)一張藍(lán)圖吧。但是事實(shí)上,我們不止畫(huà)一幅藍(lán)圖,我們要畫(huà)很多副,我們要給飛機(jī)的引擎畫(huà),要給飛機(jī)的輪子畫(huà),要給。。。等等。然后呢,我們根據(jù)藍(lán)圖來(lái)建造各個(gè)部件并且組裝起來(lái)。這樣才可以成為一個(gè)真正的飛機(jī),可以飛的飛機(jī)。就像一架飛機(jī)是一組基于一幅藍(lán)圖結(jié)婚來(lái)配合動(dòng)作的部件,我們的ActionScript程序的運(yùn)行就是一組基于一個(gè)類(lèi)(Class)集合來(lái)配合動(dòng)作的對(duì)象(Object)。對(duì)象即實(shí)體,就是類(lèi)的實(shí)例化,而類(lèi)就是藍(lán)圖,對(duì)象的抽象化。我想大家應(yīng)該可以明白什么是類(lèi)什么是對(duì)象了吧。類(lèi)和對(duì)象是面向?qū)ο笾凶罨镜母拍?。?duì)象是人們要進(jìn)行研究的任何事物,從最簡(jiǎn)單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對(duì)象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或事件。對(duì)象具有狀態(tài),一個(gè)對(duì)象用數(shù)據(jù)值來(lái)描述它的狀態(tài)。對(duì)象還有操作,用于改變對(duì)象的狀態(tài),對(duì)象及其操作就是對(duì)象的行為。對(duì)象實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對(duì)象的統(tǒng)一體中類(lèi)具有相同或相似性質(zhì)的對(duì)象的抽象就是類(lèi)。因此,對(duì)象的抽象是類(lèi),類(lèi)的具體化就是對(duì)象,也可以說(shuō)類(lèi)的實(shí)例是對(duì)象。類(lèi)具有屬性,它是對(duì)象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來(lái)描述類(lèi)的屬性。類(lèi)具有操作,它是對(duì)象的行為的抽象,用操作名和實(shí)現(xiàn)該操作的方法來(lái)描述。在客觀世界中有若干類(lèi),這些類(lèi)之間有一定的結(jié)構(gòu)關(guān)系。通常有兩種主要的結(jié)構(gòu)關(guān)系,即一般--具體結(jié)構(gòu)關(guān)系,整體--部分結(jié)構(gòu)關(guān)系。一般——具體結(jié)構(gòu)稱為分類(lèi)結(jié)構(gòu),也可以說(shuō)是“或”關(guān)系,或者是“isa”關(guān)系。整體——部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),它們之間的關(guān)系是一種“與”關(guān)系,或者是“hasa”關(guān)系。對(duì)象之間進(jìn)行通信的結(jié)構(gòu)叫做消息。在對(duì)象的操作中,當(dāng)一個(gè)消息發(fā)送給某個(gè)對(duì)象時(shí),消息包含接收對(duì)象去執(zhí)行某種操作的信息。發(fā)送一條消息至少要包括說(shuō)明接受消息的對(duì)象名、發(fā)送給該對(duì)象的消息名(即對(duì)象名、方法名)。一般還要對(duì)參數(shù)加以說(shuō)明,參數(shù)可以是認(rèn)識(shí)該消息的對(duì)象所知道的變量名,或者是所有對(duì)象都知道的全局變量名。類(lèi)中操作的實(shí)現(xiàn)過(guò)程叫做方法,一個(gè)方法有方法名、參數(shù)、方法體。以上就是面向?qū)ο蟮幕靖拍睿F(xiàn)在我們來(lái)說(shuō)下面向?qū)ο蟮?大特性。首先,封裝性。什么是封裝性?封裝性是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ)。面向?qū)ο蟮念?lèi)是封裝良好的模塊,類(lèi)定義將其說(shuō)明(用戶可見(jiàn)的外部接口)與實(shí)現(xiàn)(用戶不可見(jiàn)的內(nèi)部實(shí)現(xiàn))顯式地分開(kāi),其內(nèi)部實(shí)現(xiàn)按其具體定義的作用域提供保護(hù)。對(duì)象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來(lái)的變動(dòng)影響。面向?qū)ο蟮姆庋b比傳統(tǒng)語(yǔ)言的封裝更為清晰、更為有力。其次是繼承性。繼承性是子類(lèi)自動(dòng)共享父類(lèi)數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類(lèi)之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類(lèi)所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。繼承性是面向?qū)ο笳Z(yǔ)言設(shè)計(jì)語(yǔ)言不同于其它語(yǔ)言的最重要的特點(diǎn),是其他語(yǔ)言所沒(méi)有的。在類(lèi)層次中,子類(lèi)只繼承一個(gè)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為單重繼承。在類(lèi)層次中,子類(lèi)繼承了多個(gè)父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為多重繼承。在軟件開(kāi)發(fā)中,類(lèi)的繼承性使所建立的軟件具有開(kāi)放性、可擴(kuò)充性,這是信息組織與分類(lèi)的行之有效的方法,它簡(jiǎn)化了對(duì)象、類(lèi)的創(chuàng)建工作量,增加了代碼的可重性。采用繼承性,提供了類(lèi)的規(guī)范的等級(jí)結(jié)構(gòu)。通過(guò)類(lèi)的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重用性。最后就是多態(tài)性。多態(tài)性是指相同的操作或函數(shù)、過(guò)程可作用于多種類(lèi)型的對(duì)象上并獲得不同的結(jié)果。不同的對(duì)象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。多態(tài)性允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng)了軟件的靈活性和重用性。其實(shí)這上面講的知識(shí)滄海一粟,具體的語(yǔ)言設(shè)計(jì)會(huì)在詳細(xì)的設(shè)計(jì)里面講到。從以上的內(nèi)容可可以知道面向?qū)ο蟮奶匦允庆`活和重用。而如何使用面向?qū)ο笤O(shè)計(jì)的方法來(lái)設(shè)計(jì)程序,這個(gè)需要大量的練習(xí)和實(shí)踐。但是如何實(shí)踐使用AS呢,這就需要編程軟件了。上面我們已經(jīng)說(shuō)過(guò)可以用FlashBulider,但是那個(gè)軟件很龐大,框架也龐大,如果我們編寫(xiě)小程序的時(shí)候,只需要用到FlashCS4,FlashDevelop。下面我們就來(lái)介紹這兩款編譯軟件。 2.3FlashCS4軟件介紹我們先說(shuō)說(shuō)Flash的發(fā)展。在最開(kāi)始Flash是屬于Micromedia這個(gè)公司的產(chǎn)品,一直到Flash8.0。而后就被Adobe給收購(gòu)了,有Flash8.0轉(zhuǎn)變成FlashCS2,這個(gè)是Adobe命名屬下產(chǎn)品的慣用風(fēng)格,和PhotoShopCS2一樣。FlashCS4是Adobe公司的最新版本,其實(shí)也不算最新版本,只能算比較新的版本。發(fā)行于2008-8-20,而最新的FlashCS5由于不太穩(wěn)定,所以大部分的還在用FlashCS4?,F(xiàn)在先來(lái)介紹下什么是Flash。Flash是一種創(chuàng)作工具,設(shè)計(jì)人員和開(kāi)發(fā)人員可使用它來(lái)創(chuàng)建演示文稿、應(yīng)用程序和其它允許用戶交互的內(nèi)容。Flash可以包含簡(jiǎn)單的動(dòng)畫(huà)、視頻內(nèi)容、復(fù)雜演示文稿和應(yīng)用程序以及介于它們之間的任何內(nèi)容。通常,使用Flash創(chuàng)作的各個(gè)內(nèi)容單元稱為應(yīng)用程序,即使它們可能只是很簡(jiǎn)單的動(dòng)畫(huà)。您也可以通過(guò)添加圖片、聲音、視頻和特殊效果,構(gòu)建包含豐富媒體的Flash應(yīng)用程序。Flash特別適用于創(chuàng)建通過(guò)Internet提供的內(nèi)容,因?yàn)樗奈募浅P lash是通過(guò)廣泛使用矢量圖形做到這一點(diǎn)的。與位圖圖形相比,矢量圖形需要的內(nèi)存和存儲(chǔ)空間小很多,因?yàn)樗鼈兪且詳?shù)學(xué)公式而不是大型數(shù)據(jù)集來(lái)表示的。位圖圖形之所以更大,是因?yàn)閳D像中的每個(gè)像素都需要一組單獨(dú)的數(shù)據(jù)來(lái)表示。要在Flash中構(gòu)建應(yīng)用程序,可以使用Flash繪圖工具創(chuàng)建圖形,并將其它媒體元素導(dǎo)入Flash文檔。接下來(lái),定義如何以及何時(shí)使用各個(gè)元素來(lái)創(chuàng)建設(shè)想中的應(yīng)用程序。在Flash中創(chuàng)作內(nèi)容時(shí),需要在Flash文檔文件中工作。Flash文檔的文件擴(kuò)展名為.fla(FLA)。Flash文檔有四個(gè)主要部分:舞臺(tái)是在回放過(guò)程中顯示圖形、視頻、按鈕等內(nèi)容的位置。在Flash基礎(chǔ)中將對(duì)舞臺(tái)做詳細(xì)介紹。時(shí)間軸用來(lái)通知Flash顯示圖形和其它項(xiàng)目元素的時(shí)間,也可以使用時(shí)間軸指定舞臺(tái)上各圖形的分層順序。位于較高圖層中的圖形顯示在較低圖層中的圖形的上方。庫(kù)面板是Flash顯示Flash文檔中的媒體元素列表的位置。ActionScript代碼可用來(lái)向文檔中的媒體元素添加交互式內(nèi)容。例如,可以添加代碼以便用戶在單擊某按鈕時(shí)顯示一幅新圖像,還可以使用ActionScript向應(yīng)用程序添加邏輯。邏輯使應(yīng)用程序能夠根據(jù)用戶的操作和其它情況采取不同的工作方式。Flash包括兩個(gè)版本的ActionScript,可滿足創(chuàng)作者的不同具體需要。有關(guān)編寫(xiě)ActionScript的詳細(xì)信息,請(qǐng)參閱"幫助"面板中的"學(xué)習(xí)Flash中的ActionScript2.0"。Flash包含了許多種功能,如預(yù)置的拖放用戶界面組件,可以輕松地將ActionScript添加到文檔的內(nèi)置行為,以及可以添加到媒體對(duì)象的特殊效果。這些功能使Flash不僅功能強(qiáng)大,而且易于使用。完成Flash文檔的創(chuàng)作后,可以使用"文件">"發(fā)布"命令發(fā)布它。這會(huì)創(chuàng)建文件的一個(gè)壓縮版本,其擴(kuò)展名為.swf(SWF)。然后,就可以使用FlashPlayer在Web瀏覽器中播放SWF文件,或者將其作為獨(dú)立的應(yīng)用程序進(jìn)行播放。有關(guān)FlashPlayer的介紹,請(qǐng)參閱關(guān)于FlashPlayer。而以后所有的版本都是在這基礎(chǔ)上增加功能而不會(huì)改變架構(gòu)。如FlashCS4就是增加了很多功能。1.基于對(duì)象的動(dòng)畫(huà).使用基于對(duì)象的動(dòng)畫(huà)對(duì)個(gè)別動(dòng)畫(huà)屬性實(shí)現(xiàn)全面控制,它將補(bǔ)間直接應(yīng)用于對(duì)象而不是關(guān)鍵幀。使用貝賽爾手柄輕松更改運(yùn)動(dòng)路徑。2.3D轉(zhuǎn)換.借助令人興奮的全新3D平移和旋轉(zhuǎn)工具,通過(guò)3D空間為2D對(duì)象創(chuàng)作動(dòng)畫(huà),您可以沿x、y、z軸創(chuàng)作動(dòng)畫(huà)。將本地或全局轉(zhuǎn)換應(yīng)用于任何對(duì)象。但非真正意義上的3D,層的位置關(guān)系其顯示問(wèn)題。(處于頂層的圖形不會(huì)因?yàn)?D旋轉(zhuǎn)而到達(dá)底部)3.反向運(yùn)動(dòng)與骨骼工具.使用一系列鏈接對(duì)象創(chuàng)建類(lèi)似于鏈的動(dòng)畫(huà)效果,或使用全新的骨骼工具扭曲單個(gè)形狀。4.使用Deco工具和噴涂刷實(shí)現(xiàn)程序建模.將任何元件轉(zhuǎn)變?yōu)榧磿r(shí)設(shè)計(jì)工具。以各種方式應(yīng)用元件:使用Deco工具快速創(chuàng)建類(lèi)似于萬(wàn)花筒的效果并應(yīng)用填充,或使用噴涂刷在定義區(qū)域隨機(jī)噴涂元件。5.動(dòng)畫(huà)編輯器.使用全新的動(dòng)畫(huà)編輯器體驗(yàn)對(duì)關(guān)鍵幀參數(shù)的細(xì)致控制,這些參數(shù)包括旋轉(zhuǎn)、大小、縮放、位置和濾鏡等。使用圖形顯示以全面控制輕松實(shí)現(xiàn)調(diào)整。6.元數(shù)據(jù)(XMP)支持.使用全新的XMP面板向SWF文件添加元數(shù)據(jù)??焖僦付?biāo)記以增強(qiáng)協(xié)作和移動(dòng)體驗(yàn)。7.動(dòng)畫(huà)預(yù)設(shè).借助可應(yīng)用于任何對(duì)象的預(yù)建動(dòng)畫(huà)啟動(dòng)項(xiàng)目。從大量預(yù)設(shè)中進(jìn)行選擇,或創(chuàng)建并保存自己的動(dòng)畫(huà)。與他人共享預(yù)設(shè)以節(jié)省動(dòng)畫(huà)創(chuàng)作時(shí)間。8.針對(duì)AdobeAIR?進(jìn)行創(chuàng)作.借助發(fā)布到AdobeAIR運(yùn)行時(shí)的全新集成功能,實(shí)現(xiàn)交互式桌面體驗(yàn)。面向跨更多設(shè)備-Web、移動(dòng)和桌面的更多用戶。9.H.264支持.借助AdobeMediaEncoder編碼為AdobeFlashPlayer運(yùn)行時(shí)可以識(shí)別的任何格式,其它Adobe視頻產(chǎn)品也提供這個(gè)工具,現(xiàn)在新增了H.264支持。10.全新AdobeCreativeSuite®界面.借助直觀的面板??亢蛷棾鍪叫袨樘岣吖ぷ餍?它們簡(jiǎn)化了您在所有AdobeCreativeSuite版本中與工具的交互。但其實(shí)這些功能在這個(gè)舒爾特方格游戲中其實(shí)沒(méi)有怎么用到,F(xiàn)LASH在這里只是起到一個(gè)美工作用,界面的設(shè)計(jì)主要靠的是FLASH,而游戲的核心成分是代碼,用的則是FlashDevelop編寫(xiě)。至于為什么會(huì)用FlashDevelop編寫(xiě),主要是因?yàn)镕LASH自帶的腳本編輯器實(shí)在是太爛,不僅是視覺(jué),界面上的難看,而且功能上也是形同雞肋,極少的代碼提示,雖然對(duì)新手來(lái)說(shuō)是熟悉ActionScript3.0的機(jī)會(huì),但是如果用來(lái)編寫(xiě)游戲來(lái)說(shuō),那真的是煎熬。于是乎,F(xiàn)lashDevelop就閃亮登場(chǎng)了。2.3FlashDevelop軟件介紹與配置FlashDevelop是一款輕量級(jí)的編譯軟件,當(dāng)然那是相對(duì)于FlexBulider來(lái)說(shuō),但是相對(duì)于FlashCS4來(lái)說(shuō),F(xiàn)lashDevelop也是好過(guò)了太多。這款免費(fèi)而又實(shí)用的編譯軟件。寫(xiě)代碼極其的方便,代碼提示很是強(qiáng)大。FlashDevelop是一款基于.NET框架的編譯軟件。所以要使用FlashDevelop就要先安裝.NETframework2.0。然后下載FlashDevelop最新版,在官方網(wǎng)站information下的Releases版塊,查找最新版。下載并安裝。FlashDevelop還需要準(zhǔn)備FlashSDK4.0,或者更高版本。FlashPlayerDebug版本也是必須的。下載完了,我們就來(lái)配置了。分別裝好FD(flashdevelop),.netframework2.0,javasdk1.6。flashSDK4.0不用裝呢·,解壓開(kāi)放在自己看得見(jiàn)找得到的地方,如:D:\flex_sdk_4(之后有用)。FlashplayerDebug就放在flashplayer相同目錄吧。打開(kāi)FD(即 FlashDevelop )開(kāi)始配置,Tools->ProgrameSettings設(shè)置AS3context下的flexsdk的地址為上面你保存的地址路徑設(shè)置Flashviewer下的ExternalplayerPath為flashplayerdebug的地址。至此配置簡(jiǎn)單完成。現(xiàn)在開(kāi)始調(diào)試了。新建一個(gè)空白項(xiàng)目。再新建一個(gè)MAIN函數(shù)然后寫(xiě)下HELLOWORLD設(shè)置發(fā)布文件形式。要將下面的testmovie改成Externalplayer否則看不到trace。然后就按下CTRL+ENTER,開(kāi)始調(diào)試吧。上面就是FlashDevelop的簡(jiǎn)單配置,如果需要更強(qiáng)大的功能那么就需要安裝插件。插件網(wǎng)上有很多,但是我們現(xiàn)在用不到,就暫時(shí)只使用初始功能即可。既然我們已經(jīng)安裝好了工具,并且也基本了解AS的基本概念了。那我們開(kāi)始來(lái)設(shè)計(jì)我們的小游戲了吧。第3章小游戲開(kāi)發(fā)的詳細(xì)過(guò)程3.1游戲功能的設(shè)計(jì)游戲功能的設(shè)計(jì),就是設(shè)計(jì)游戲里面有哪些功能。首先,是最基本的功能,點(diǎn)擊小方格,從1點(diǎn)到25然后游戲完成。這個(gè)時(shí)候要怎么設(shè)計(jì)呢?先定義一個(gè)初始值為1的變量a,點(diǎn)擊小方格->小方格作為一個(gè)對(duì)象如果被點(diǎn)擊返回本身值->如果正確,即小方格返回的值等于a,那么a就+1->一直到25,或者說(shuō)我們定義的值加不動(dòng)了,那么游戲結(jié)束。這個(gè)是最基本的邏輯,游戲里面所有的功能都要圍繞這個(gè)來(lái)展開(kāi)。比如我們的小方格,如果點(diǎn)擊正確的話是閃綠光的,如果錯(cuò)誤的話閃紅光。判定是否正確,這又要結(jié)合到上面的那個(gè)邏輯來(lái)設(shè)計(jì)。我們要一個(gè)‘開(kāi)始游戲’的按鈕,點(diǎn)擊后開(kāi)始游戲,開(kāi)始游戲的標(biāo)志就是計(jì)時(shí)器開(kāi)始計(jì)時(shí),即通過(guò)事件來(lái)通知。我們的計(jì)時(shí)器是一個(gè)從開(kāi)始被通知要開(kāi)始游戲了開(kāi)始計(jì)時(shí)的類(lèi),要怎么計(jì)時(shí)呢?可以用getTimer()這個(gè)方法,這個(gè)以后會(huì)詳細(xì)說(shuō)。具體的顯示如下:游戲結(jié)束后,我們要顯示我們的成績(jī)和評(píng)語(yǔ),我們又要設(shè)計(jì)一個(gè)看板,用來(lái)顯示文字的。計(jì)時(shí)器返回的時(shí)間給予看板,用來(lái)顯示成績(jī),然后判定屬于哪個(gè)級(jí)別。比如,如果點(diǎn)25格的等級(jí),用時(shí)超過(guò)10小于20,看板即會(huì)出現(xiàn)如下顯示:我們也要有個(gè)‘游戲說(shuō)明’的按鈕,當(dāng)鼠標(biāo)移動(dòng)到按鈕上面的時(shí)候,我們看板顯示,并顯示游戲說(shuō)明。我們還有‘選擇難度’按鈕,那個(gè)按鈕用來(lái)選擇難度。因?yàn)槲覀儾恢箍梢詮?到25,我們還可以從1-9,從1-16,從1-36,從1-49,從1-64。限制于界面的大小我們只能這么多。我們有‘排行榜’功能,這個(gè)要用ShareObject用于存儲(chǔ)小批量的數(shù)據(jù)。當(dāng)然,MySql也可以存儲(chǔ),但是AS沒(méi)有直接連接MYSQL的類(lèi)和方法,也不是說(shuō)不可以連接,但是那要和PHP通信而且要裝‘阿帕奇’服務(wù)器,要開(kāi)啟MYSQL管理,太麻煩了,所以就不用。具體顯示如下:要保存數(shù)據(jù)就要有保存數(shù)據(jù)的界面,為了讓保存界面的時(shí)候開(kāi)始不了游戲,出不了其他的點(diǎn)擊事件,我們可以再保存界面上加個(gè)隔離層,如下顯示:最后我們還有一個(gè)‘聯(lián)系我’的按鈕,這個(gè)其實(shí)有沒(méi)有也無(wú)所謂,也是在最后時(shí)刻加上去的?;镜墓δ芫驮谶@里了。其他的大大小小的功能其實(shí)也就是這些。還有些其他的小功能,如特效之類(lèi)的,都是些細(xì)化的,都是在基礎(chǔ)上添加的。功能就都在這里了,那么我們要開(kāi)始設(shè)計(jì)界面了。 3.2游戲界面的設(shè)計(jì)游戲界面的設(shè)計(jì)是基于游戲基本功能來(lái)設(shè)計(jì)的。比如你需要什么功能,然后才知道你需要什么界面。首先,先設(shè)計(jì)按鈕。按鈕是各個(gè)功能中最多的一個(gè)。按鈕設(shè)計(jì)有兩種方法。第一,純代碼設(shè)計(jì)。用的AS自帶的方法,只屬于DisplayObject后代的一個(gè)對(duì)象的方法。如下所示:varsp:Sprite=newSprite();sp.graphics.lineStyle(1);sp.graphics.beginFill(0xffffff);sp.graphics.drawRect(0,0,100,50);sp.graphics.endFill();this.addChild(a);這個(gè)就是用代碼編寫(xiě),然后AVM渲染出來(lái)的一個(gè)小按鈕,一個(gè)長(zhǎng)100,寬50,黑邊,顏色是白色的,當(dāng)程序運(yùn)行時(shí),SP在左上角顯示。這樣用代碼編寫(xiě)的話,可以減少程序的所占用的空間大小,但是外觀上就沒(méi)有用FlashCS4自定義來(lái)的美觀,自主性和方便了,但是如果習(xí)慣了用代碼編寫(xiě)外觀的話,有的時(shí)候是可以比較快的。但是效果就不如用FlashCS4來(lái)的好,所以如果是想做的有獨(dú)立性的外觀的話,那么一般來(lái)說(shuō)都是要用到FlashCS4來(lái)設(shè)定。如果只是想要快捷,輕量的話那么用代碼就可以滿足要求了。這是視情況而定的,沒(méi)有說(shuō)必須要代碼或者必須用FlashCS4來(lái)制定,我們可以有很大的自主性。好,我們先來(lái)用FlashCS4來(lái)制定按鈕。在前面已經(jīng)提到過(guò),界面設(shè)計(jì)和靈感其實(shí)都是來(lái)源于網(wǎng)上網(wǎng)友制作的一個(gè)Flash小游戲,所以這個(gè)按鈕外觀我也是參考網(wǎng)友的。設(shè)定之初只需要截圖,然后用PhotoShopCS3改變顏色,文字,然后轉(zhuǎn)成PNG格式的文件,再用FlashCS4打開(kāi)文件,轉(zhuǎn)為元件,可按F8快捷鍵轉(zhuǎn)換,并且為之命名,然后給元件添加屬性,作為ActionScript3.0輸出,然后會(huì)提示你在本文件里面沒(méi)有同名的類(lèi),F(xiàn)lashCS4將會(huì)為你定義一個(gè)默認(rèn)的類(lèi),可以引用此類(lèi)。 具體過(guò)程如下所示:用PhotoShopCS3改變顏色,文字。轉(zhuǎn)成PNG格式。FlashCS4打開(kāi)文件并轉(zhuǎn)為元件。給元件添加屬性,作為ActionScript3.0輸出。我們?cè)俳⒁粋€(gè)類(lèi),用于引用我們剛做的元件。代碼如下所示:packageui{ importflash.display.MovieClip; [Embed(source="../anniu.swf",symbol="startBtn")] publicclassBtnextendsMovieClip { }}同理可以將其他的按鈕用同一種方法制作。我們做其他的按鈕也是采用同樣的步驟,方法,代碼只是改一下我們引用的字符就可以。我們還要來(lái)做按鈕欄,或者說(shuō)是菜單欄,我們的按鈕,是時(shí)間顯示器都是在這里放置的。菜單欄我們不用做的像按鈕那樣,我們可以用代碼來(lái)編寫(xiě)。代碼如下: this.graphics.beginFill(0x5d5d5d); this.graphics.drawRect(0,0,stage.stageWidth,80); this.graphics.endFill(); this.graphics.lineStyle(2,0xffffff); this.graphics.drawRect(2,2,stage.stageWidth-4,76);出來(lái)的效果就是這樣的。 我們也可以用代碼來(lái)編寫(xiě)看板,代碼如下:privatefunctiondrawView(w:Number,h:Number):void{ this.graphics.beginFill(0x5d5d5d); this.graphics.drawRoundRect(0,0,w,h,10,10); this.graphics.endFill(); this.graphics.lineStyle(1,0xffffff); this.graphics.drawRect(5,5,w-10,h-10); }效果如下:這個(gè)時(shí)候我們已經(jīng)把大體的框架設(shè)計(jì)好了,還有一些其他功能,比如:排行榜,選擇難度的我們都可以在這基礎(chǔ)上添加。但是總體上是不會(huì)有什么改變的。以后的代碼編寫(xiě)也都是圍繞著這些界面來(lái)展開(kāi)的。下面就是詳細(xì)的代碼編寫(xiě) 第4章游戲代碼編寫(xiě)4.1制作方格類(lèi)我們先來(lái)做核心類(lèi)之一的,方格類(lèi)。這里我采用貼代碼的方式,然后逐一解釋。 packagetile這里的packagetile指的是本類(lèi)在包tile里面,包是為一組類(lèi)設(shè)計(jì)的概念上的容器。每個(gè)包尾一個(gè)程序劃分出一個(gè)獨(dú)立的實(shí)際區(qū)域,并給該區(qū)域一個(gè)名字,成為包名。{ importflash.display.*; importflash.events.MouseEvent; importflash.filters.BlurFilter; importflash.text.TextField; importflash.text.TextFieldAutoSize; importflash.text.TextFieldType; importflash.text.TextFormat; importflash.text.TextFormatAlign; importgs.easing.Elastic; importgs.TweenMax;這里import代表著導(dǎo)入,后面的表示是某某包的某某類(lèi),比如說(shuō)importflash.display.*;呢就是flash包里的display包的所有類(lèi),“*”代表所有的類(lèi)。其他的的都是類(lèi)似的意思。因?yàn)楸绢?lèi)需要引用下面所導(dǎo)入的類(lèi),或者類(lèi)里面的方法。 publicclassTileextendsSprite這句的意思表示Tile類(lèi)繼承自Sprite,Sprite的繼承關(guān)系是這樣:Sprite->DisplayObjectContainer->InteractiveObject->DisplayObject->->Ojbect。其中Object是所有類(lèi)的祖先,EventDisptcher類(lèi)代表著它的子類(lèi)可以發(fā)送事件。DisplayObject類(lèi)代表它的子類(lèi)可以顯示在Stage上,即舞臺(tái)上可以顯示出。InteractiveObject類(lèi)是用戶可以使用鼠標(biāo)和鍵盤(pán)與之交互的所有顯示對(duì)象的抽象基類(lèi)。如果某類(lèi)想要和用戶進(jìn)行交互那么必須繼承此類(lèi)或者此類(lèi)的子類(lèi)。DisplayObjectContainer類(lèi)是可用作顯示列表中顯示對(duì)象容器的所有對(duì)象的基類(lèi)。該顯示列表管理FlashPlayer中顯示的所有對(duì)象。DisplayObjectContainer類(lèi)是可以包含子對(duì)象的所有對(duì)象的抽象基類(lèi)。無(wú)法直接對(duì)其進(jìn)行實(shí)例化;調(diào)用newDisplayObjectContainer()構(gòu)造函數(shù)會(huì)引發(fā)ArgumentError異常。如果繼承此類(lèi)了,就可以添加Child,可以叫做是孩子。本類(lèi)是繼承自Sprite的所以不僅可以添加孩子,還可以與用戶交互,即鍵盤(pán)和鼠標(biāo)的交互。下面就要開(kāi)始定義變量,屬性了??梢钥闯鰧傩源蠖喽际莗rivate,即私有的,私有的指可以在本類(lèi)里面使用,不管是子類(lèi),還是其他的都不能調(diào)用。然后是各種類(lèi)型的定義,比如_tileID代表的是每個(gè)方格的號(hào)碼,即點(diǎn)擊后返回的號(hào)碼,一個(gè)方格只能有一個(gè)。但是可以改變,不能直接改其屬性,因?yàn)樗撬接械?。_container是一個(gè)容器,用來(lái)顯示位圖的,稍后會(huì)詳細(xì)解釋。_size是方格的尺寸,_text是用于顯示方格號(hào)碼的文本對(duì)象。而下面的是用于特效的位圖。_format是用于給文本的Style定義的,格式化用。最后一個(gè)isRight是用于判定是否點(diǎn)擊正確,初始量為false。 privatevar_tileID:int; privatevar_container:Sprite; privatevar_size:Number=60; privatevar_text:TextField; privatevar_redBack:Bitmap; privatevar_redData:BitmapData; privatevar_greenBack:Bitmap; privatevar_greenData:BitmapData; privatevar_format:TextFormat; publicvarisRight:Boolean=true;這個(gè)是構(gòu)造,構(gòu)造也是面向?qū)ο筇赜械母拍?。?gòu)造方法或者簡(jiǎn)稱為構(gòu)造器是一個(gè)離散的指令集合,用于初始化一個(gè)類(lèi)的實(shí)例。 publicfunctionTile(id:int=0) { this._tileID=id; initTile(); }構(gòu)造里面有initTile()方法,其實(shí)可以寫(xiě)進(jìn)構(gòu)造里面的,但是為了便于管理和維護(hù),我們可以單獨(dú)列出一個(gè)初始方法。 privatefunctioninitTile():void{ 首先我們先用ActionScript3.0自帶的繪圖,渲染方法繪出外觀,是一個(gè)線寬為4,顏色為0x74675E,填充顏色為空,大小為60的正方形。然后this.addChild(_container),意思即為構(gòu)造好的實(shí)例要添加_container。并且_container的初始透明度為0,即是透明的。需要注意的是初始時(shí)是透明的,如果是交互的對(duì)象,仍有交互作用。如果添加了偵聽(tīng),如有事件發(fā)生仍會(huì)反應(yīng)。但是如果是some.visible=false;那么偵聽(tīng)將不起作用,這點(diǎn)很重要,以后的程序設(shè)計(jì)有很多用到了這個(gè)特性。 _container=newSprite(); _container.graphics.lineStyle(4,0x74675E); _container.graphics.drawRect(0,0,_size,_size); this.addChild(_container); _container.alpha=0;啟用方法draw();此方法為自定義方法,用于繪出容器填充的顏色。因?yàn)樵谥笠灿卸嗵幮枰玫礁淖兎椒?,所以將之定義為一個(gè)可以添加參數(shù)的方法,方便使用,重用。 draw(0xffffff,2);這里的位圖是用于修改方格的現(xiàn)實(shí)顏色的,在設(shè)計(jì)之初本想用graphics來(lái)修改,然后發(fā)現(xiàn)那樣不僅很容易出錯(cuò)而且及其損耗CPU,這時(shí)候,我在網(wǎng)上亂逛的時(shí)候發(fā)現(xiàn)了一個(gè)帖子說(shuō)可以用內(nèi)存換CPU,即先定義好變量,然后存儲(chǔ)在對(duì)象里面,需要時(shí)再拿出,這樣只要耗費(fèi)內(nèi)存即可,而今大多數(shù)電腦的內(nèi)存都已經(jīng)達(dá)到1G以上,所以現(xiàn)在大多數(shù)都是用這種方法來(lái)代替純CPU運(yùn)算,這樣對(duì)程序的運(yùn)行效率有很大的提升。這里也是這樣做的,先定義兩個(gè)不同的BitmapData對(duì)象并實(shí)例化,一個(gè)為紅色,一個(gè)為綠色。如果正確就現(xiàn)實(shí)綠色,不正確就現(xiàn)實(shí)紅色。但是光定義BitmapData是不夠的,還需要定義裝載BitmapData的容器,這個(gè)容器就是Bitmap。因?yàn)锽itmapData只是數(shù)據(jù),或者說(shuō)里面只是些編碼,需要編譯,就要Bitmap編譯了。如下所示,Bitmap是一個(gè)容器,但是卻沒(méi)有交互功能。即不能用于偵聽(tīng)鼠標(biāo)事件和鍵盤(pán)事件。這點(diǎn)要注意,所以我們還要在位圖上面加一層控制層。 _redData=newBitmapData(_size,_size,false,0xff0000); _redBack=newBitmap(_redData); addChild(_redBack); _redBack.alpha=0; _greenData=newBitmapData(_size,_size,false,0x00ff00); _greenBack=newBitmap(_greenData); addChild(_greenBack); _greenBack.alpha=0;這里是實(shí)例化TextFormat對(duì)象,并且為其添加屬性, _format=newTextFormat();比如字體,是否是粗體,字號(hào)多少,排列方式,顏色。 _format.font="ComicSansMS"; _format.bold=true; _format.size=25; _format.align=TextFormatAlign.CENTER; _format.color=0x74675E;實(shí)例化_text,為其設(shè)置文本格式,可選性為false,文本的寬度,高度,所在位置,文本的類(lèi)型是靜態(tài)文本,動(dòng)態(tài)文本,還是普通文本,再為其添加內(nèi)容,就是_titleID的數(shù)值,最后被添加上父容器。 _text=newTextField(); _text.defaultTextFormat=_format; _text.selectable=false; _text.width=_size; _text.height=_size*3/4; _text.y=_size/2-_text.height/2; _text.type=TextFieldType.DYNAMIC; _text.text=_tileID.toString(); addChild(_text);本對(duì)象的mouseChildren設(shè)置為false,主要是為了讓文本不受電擊事件的傳播,再為本對(duì)象添加事件偵聽(tīng),都是鼠標(biāo)事件,一個(gè)是鼠標(biāo)劃上去,一個(gè)是鼠標(biāo)劃下去。 this.mouseChildren=false; this.addEventListener(MouseEvent.ROLL_OVER,onRollOver); this.addEventListener(MouseEvent.ROLL_OUT,onRollOut); }下面兩個(gè)就是事件發(fā)生時(shí)對(duì)象所要做的反應(yīng),其中TweenMax是一個(gè)自定義類(lèi),不是ActionScript自帶的,用于緩動(dòng)效果,ActionScrpt3.0雖然也有自帶的用于緩動(dòng)效果的類(lèi)Tween,但是不但從效果上看形同雞肋,效率上還大大不如自定義類(lèi)。所以現(xiàn)今大部分都是采用自定義類(lèi),網(wǎng)上有很多那種類(lèi)庫(kù),效果都還不錯(cuò)而我用的這種類(lèi)庫(kù)算是比較著名的,效率高,效果好。下面的代碼的意思是_container的alpha從初始值到最終值,如functiononRollOver(e:MouseEvent):void是從0到1,而functiononRollOut(e:MouseEvent):void是從1到0,都是在0.1秒的時(shí)間內(nèi)完成的。 privatefunctiononRollOver(e:MouseEvent):void{ TweenMax.to(_container,0.1,{alpha:1}); } privatefunctiononRollOut(e:MouseEvent):void{ TweenMax.to(_container,0.1,{alpha:0}); } functiondraw(color:uint,line:int):void設(shè)計(jì)之初是用于重復(fù)變色的,但是發(fā)現(xiàn)效果不怎么好,所以又不用了,但也沒(méi)有刪掉。 privatefunctiondraw(color:uint,line:int):void{ this.graphics.clear(); this.graphics.lineStyle(line,0x5d5d5d); this.graphics.beginFill(color); this.graphics.drawRect(0,0,_size,_size); this.graphics.endFill(); }publicfunctionchange():void這個(gè)是個(gè)公共方法,用于在上級(jí)調(diào)用方法,用于特效和判定是否是點(diǎn)擊正確。如果是正確的就添加一個(gè)模糊濾鏡,然后綠色位圖閃爍一下。如果是錯(cuò)誤的一樣要添加濾鏡,紅色位圖閃爍。完畢后,濾鏡消除。 publicfunctionchange():void{ this.filters=[newBlurFilter(3,3,1)]; if(isRight){ TweenMax.to(_redBack,0.1,{onComplete:backBegin,onCompleteParams:[_redBack],alpha:1}); }else{ TweenMax.to(_greenBack,0.1,{onComplete:backBegin,onCompleteParams:[_greenBack],alpha:1}); } } privatefunctionbackBegin(which:Bitmap):void{ TweenMax.to(which,0.2,{alpha:0}); this.filters=[]; }以下是一些getter()setter()方法,用于修改private屬性的值,或者獲得private屬性的值。 publicfunctiongetsize():int{ return_size; } publicfunctionsetsize(value:int):void{ this._size=value; } publicfunctionsettileID(value:int):void{ this._tileID=value; } publicfunctiongettileID():int{ returnthis._tileID; }重載一個(gè)公共方法,用于調(diào)試。 publicoverridefunctiontoString():String{ return"Tile"+this._tileID; }定義一個(gè)公共的銷(xiāo)毀方法。便于以后可以銷(xiāo)毀對(duì)象,釋放內(nèi)存。銷(xiāo)毀方法需要移除事件偵聽(tīng),移除自己的孩子。最后一句,是可以讓對(duì)象的父容器移除對(duì)象本身。 publicfunctiondistroy():void{ this.removeEventListener(MouseEvent.ROLL_OVER,onRollOver); this.removeEventListener(MouseEvent.ROLL_OUT,onRollOut); while(this.numChildren>0){ this.removeChildAt(0); } MovieClip(this.parent).removeChild(this); } }}Tile的代碼就編寫(xiě)到了這里。下面我們要開(kāi)始設(shè)計(jì)一個(gè)計(jì)時(shí)器類(lèi),用于計(jì)算成績(jī)。 4.2計(jì)時(shí)器的制作下面是Iclock接口,在這里其實(shí)作用不大,但是如果是大型的游戲或者大型的程序要團(tuán)隊(duì)合作的話,那接口就是必須的了,現(xiàn)在只是為了屬下了接口這個(gè)應(yīng)用而特意做的,無(wú)特別意義。packagetile{ publicinterfaceIClock { functionstart():void; functionstop():void; } }下面我們來(lái)說(shuō)Calculagraph。Calculagraph類(lèi)是繼承自Sprite并且實(shí)現(xiàn)了Iclock接口。接口是面向?qū)ο筇赜械母拍?,是用于定義一個(gè)新數(shù)據(jù)類(lèi)型的一種ActionScript語(yǔ)言構(gòu)造,很像一個(gè)類(lèi)定義一個(gè)數(shù)據(jù)類(lèi)型。然而,一個(gè)類(lèi)定義一個(gè)數(shù)據(jù)類(lèi)型并且對(duì)它提供實(shí)現(xiàn),而一個(gè)接口只以抽象的形式定義一個(gè)數(shù)據(jù)類(lèi)型,沒(méi)有對(duì)改數(shù)據(jù)類(lèi)型提供實(shí)現(xiàn)。 publicclassCalculagraphextendsSpriteimplementsIClock定義對(duì)象屬性,_startTime和_passTime用于計(jì)時(shí),_showText和_showTf用于顯示時(shí)間,_miniSecond和_second還有_minute用于返回時(shí)間。 privatevar_startTime:int; privatevar_passTime:int; privatevar_showText:TextField; privatevar_showTf:TextFormat; privatevar_miniSecond:int; privatevar_second:int; privatevar_minute:int;構(gòu)造方法里面就一個(gè)init()私有方法,主要是方便,讓構(gòu)造不會(huì)太臃腫。 publicfunctionCalculagraph() { init(); }init():void主要用于初始化,屬性初始化。 _startTime=0; _miniSecond=0; _second=0; _minute=0;_showTf文本格式,字體ComicSansMS,粗體,字號(hào)25,顏色為0xec9b42,排列方式為靠左排列。 _showTf=newTextFormat(); _showTf.font="ComicSansMS"; _showTf.bold=true; _showTf.size=25; _showTf.color=0xec9b42; _showTf.align=TextFormatAlign.LEFT;_showText顯示時(shí)間文本對(duì)象,寬度為200,默認(rèn)格式為_(kāi)showTf,不可選,初始文本內(nèi)容為pt00''00'00,并被添加到顯示列表。 _showText=newTextField(); _showText.width=200; _showText.defaultTextFormat=_showTf; _showText.selectable=false; _showText.text="pt00''00'00"; addChild(_showText);定義一個(gè)公共方法start(),用于讓計(jì)時(shí)器開(kāi)始計(jì)時(shí),并定義一個(gè)公共方法stop(),用于讓計(jì)時(shí)器停止計(jì)時(shí)。start()方法將計(jì)時(shí)用的屬性歸零,并且為_(kāi)showText一個(gè)Event.ENTER_FRAME事件,播放頭進(jìn)入新幀時(shí)調(diào)度。并且以程序的幀率為間隔,不斷地調(diào)度。 publicfunctionstart():void{ _startTime=0; _miniSecond=0; _second=0; _minute=0; _showText.addEventListener(Event.ENTER_FRAME,loop); }stop()方法移除偵聽(tīng)。 _startTime=0; _showText.removeEventListener(Event.ENTER_FRAME,loop);這里的偵聽(tīng)方法為loop(e:Event):void,假設(shè)_startTime等于0那么_startTime為getTimer()返回的值,getTimer()返回的是系統(tǒng)時(shí)間,是整型的數(shù)據(jù)類(lèi)型。_passTime即當(dāng)前時(shí)間與初始時(shí)間之差,_showText顯示的內(nèi)容是_passTime通過(guò)formatTime()返回的字符類(lèi)型。 privatefunctionloop(e:Event):void{ if(_startTime==0){ _startTime=getTimer(); } _passTime=getTimer()-_startTime; _showText.text=formatTime(_passTime); }formatTime()方法用于格式化_passTime,因?yàn)開(kāi)passTime只是整型,我們要顯示成分鐘:秒鐘:毫秒的格式,就必須格式化。如下算法: _miniSecond=pass-_second*1000-_minute*60*1000; if(_miniSecond>=1000){ _second++; } if(_second>=60){ _minute++; _second=_second-60; }這個(gè)時(shí)候基本的數(shù)值已經(jīng)可以確定,然后就截取我們需要顯示的,下面的是字符對(duì)象的公有方法,substr(a,b)取字符的第a位開(kāi)始b個(gè)字符。隨后返回str; varstr:String="pt"+String(_minute+100).substr(1,2)+"'"+String(_second+100).substr(1,2)+"'"+String(_miniSecond).substr(0,2); returnstr;隨后定義一些getter()函數(shù),返回私有變量。 publicfunctiongetminute():int{ return_minute; } publicfunctiongetsecond():int{ return_second; } publicfunctiongetoverTime():String{ return_showText.text; } publicfunctiongettheTime():Number{ return_passTime; }計(jì)時(shí)器也制作完成了,現(xiàn)在就可以開(kāi)始制作看板類(lèi)了。4.3制作看板看板類(lèi)就是用來(lái)顯示游戲說(shuō)明的信息,最后你的成績(jī)和成績(jī)判定,還有聯(lián)系人。以下是代碼:構(gòu)造方法需要渲染界面,并添加游戲難度,設(shè)置內(nèi)容。 publicfunctionShowPanelOfMy(w:Number,h:Number,c:int){ this._count=c; drawView(w,h); initText(); setContent(); }繪圖,繪制看板外觀,灰色,帶圓角的四方形。 privatefunctiondrawView(w:Number,h:Number):void{ this.graphics.beginFill(0x5d5d5d); this.graphics.drawRoundRect(0,0,w,h,10,10); this.graphics.endFill(); this.graphics.lineStyle(1,0xffffff); this.graphics.drawRect(5,5,w-10,h-10); }初始化看板的顯示文本屬性。 privatefunctioninitText():void{ _tf=newTextFormat(); _tf.font="ComicSansMS"; _tf.bold=true; _tf.size=15; _tf.color=0xffffff; _text=newTextField(); _text.defaultTextFormat=_tf; _text.selectable=false; _text.autoSize=TextFieldAutoSize.LEFT; _text.x=50; _text.y=100; _text.width=100; _text.multiline=true; _text.text="test"; this.addChild(_text); }設(shè)置文本顯示內(nèi)容,用_mode作為判定,邏輯部分在Game類(lèi)上。1代表是說(shuō)明,2代表等級(jí)1,3代表等級(jí)2以此類(lèi)推,6代表是聯(lián)系我。 publicfunctionsetContent():void{ _text.visible=false; switch(_mode){ case"1": _text.visible=true; _text.text="訓(xùn)練時(shí),要求被測(cè)者用手指按"+"\n"+"1—"+_count+"的順序依次指出其位置,"+"\n"+ "同時(shí)誦讀出聲,施測(cè)者一旁記錄所用時(shí)間。"+"\n"+ "數(shù)完25個(gè)數(shù)字所用時(shí)間越短,注意力水平越高。"+"\n"+ "以7—12歲年齡組為例,能達(dá)到26以上為優(yōu)秀,"+"\n"+"學(xué)習(xí)成績(jī)應(yīng)是名列前茅," +"\n"+"42屬于中等水平,班級(jí)排名會(huì)在中游或偏下,"+"\n"+"50則問(wèn)題較大考試會(huì)出現(xiàn)不及格現(xiàn)象"+"\n"+"18歲及以上成年人最好可達(dá)到8的水平25為中等水平。"; break;其他的以此類(lèi)推,只是改一下需要顯示的文字即可。 default:break; } }設(shè)置mode,并且改變內(nèi)容。 publicfunctionsetmode(value:String):void{ this._mode=value; setContent(); }設(shè)置count,并且改變內(nèi)容。 publicfunctionsetcount(value:int):void{ this._count=value; setContent(); }這個(gè)是看板的代碼,需要和Game類(lèi)相結(jié)合來(lái)看,下面就開(kāi)始做Game類(lèi)了。4.4Game類(lèi)的編寫(xiě)游戲的主要邏輯都放在Game類(lèi)里面,方格被點(diǎn)擊與否,是否正確,錯(cuò)誤了怎么辦,正確了又改怎么做,控制游戲進(jìn)程,游戲完結(jié)后調(diào)度事件,調(diào)節(jié)難度的調(diào)度事件等等??梢哉f(shuō)是整個(gè)游戲的骨架。定義變量,用于各種邏輯,游戲變量。 如果被添加進(jìn)了舞臺(tái)則init(),如果沒(méi)有添加事件偵聽(tīng)。 publicfunctionGame():void { if(stage)init(); elseaddEventListener(Event.ADDED_TO_STAGE,init); }初始化。 privatefunctioninit(e:Event=null):void {移除偵聽(tīng),創(chuàng)建DataProvider類(lèi)型的arr,這是選擇難度的數(shù)據(jù)。 removeEventListener(Event.ADDED_TO_STAGE,init); arr=newDataProvider(); arr.addItem({label:"選擇",data:0}); arr.addItem({label:"入門(mén)(3)",data:3}); arr.addItem({label:"簡(jiǎn)單(4)",data:4}); arr.addItem({label:"一般(5)",data:5}); arr.addItem({label:"有點(diǎn)難(6)",data:6}); arr.addItem({label:"困難(7)",data:7}); arr.addItem({label:"很難(8)",data:8});菜單欄的繪制。 this.graphics.beginFill(0x5d5d5d); this.graphics.drawRect(0,0,stage.stageWidth,80); this.graphics.endFill(); this.graphics.lineStyle(2,0xffffff); this.graphics.drawRect(2,2,stage.stageWidth-4,76); _isStart=false;各種自定義的方法,稍后解釋。 sortArr(); initTimer(); initButton(); initSome(); initPanel();添加點(diǎn)擊事件偵聽(tīng),當(dāng)點(diǎn)擊了對(duì)象,偵聽(tīng)方法做出反應(yīng)。 this.addEventListener(MouseEvent.CLICK,onClick); }創(chuàng)建計(jì)時(shí)器,顯示在菜單上,定位坐標(biāo)。 privatefunctioninitTimer():void{ _calculagraph=newCalculagraph(); addChild(_calculagraph); _calculagraph.x=490; _calculagraph.y=40; }創(chuàng)建看板,定位坐標(biāo),添加進(jìn)舞臺(tái)。 privatefunctioninitPanel(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)保險(xiǎn)代理與服務(wù)合同
- 2025年度高端制造裝備研發(fā)股權(quán)投資及市場(chǎng)拓展合同
- 二零二五年度南昌商品房買(mǎi)賣(mài)合同2025版標(biāo)準(zhǔn)文本
- 2025年度個(gè)人門(mén)面出租合同附贈(zèng)增值服務(wù)范本3篇
- 2025年度鋼材運(yùn)輸服務(wù)合同模板
- 二零二五年度跨境電商進(jìn)口生鮮食品采購(gòu)合同范本4篇
- 華為認(rèn)證智能協(xié)作中級(jí) HCIP-Collaboration H11-861考試題庫(kù)及答案
- 2025年度汽車(chē)租賃車(chē)輛租賃價(jià)格調(diào)整合同6篇
- 2025年度模具行業(yè)學(xué)徒培養(yǎng)用工合同示范4篇
- 2025年度南匯工商行政管理志編纂服務(wù)合同4篇
- 農(nóng)村自建房安全合同協(xié)議書(shū)
- 《教科版》二年級(jí)科學(xué)下冊(cè)全冊(cè)課件(完整版)
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無(wú)線廣播行業(yè)現(xiàn)狀分析
- 漢語(yǔ)言溝通發(fā)展量表(長(zhǎng)表)-詞匯及手勢(shì)(8-16月齡)
- 高速公路相關(guān)知識(shí)講座
- 兒科關(guān)于抗生素使用的PDCA
- 小學(xué)生必備古詩(shī)
- 手術(shù)室護(hù)理實(shí)踐指南2023年
評(píng)論
0/150
提交評(píng)論