Flash游戲制作常用代碼解析_第1頁
Flash游戲制作常用代碼解析_第2頁
Flash游戲制作常用代碼解析_第3頁
Flash游戲制作常用代碼解析_第4頁
Flash游戲制作常用代碼解析_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

—PAGE69—往鏈點(diǎn)點(diǎn)通共享資源,了解更多請登錄HYPERLINK"www。WL566。com"www.WL566.com目錄TOC\o"1-1”\h\z\uHYPERLINK\l"_Toc115512999"Flash游戲制作常用代碼解析?PAGEREF_Toc115512999\h3HYPERLINK\l"_Toc115513000"FLASH游戲制作基礎(chǔ):響應(yīng)鍵盤的四種方法?PAGEREF_Toc115513000\h9HYPERLINK\l”_Toc115513001"Flash游戲制作-—空戰(zhàn)?PAGEREF_Toc115513001\h12HYPERLINK\l"_Toc115513002"Flash飛行游戲制作全解?PAGEREF_Toc115513002\h19HYPERLINK\l"_Toc115513003"Flash游戲制作—-迷宮 PAGEREF_Toc115513003\h29_Toc115513005”用Flash制作互動的小人 PAGEREF_Toc115513005\h45HYPERLINK\l"_Toc115513006"常見的飛機(jī)放射子彈的掌握 PAGEREF_Toc115513006\h49HYPERLINK\l"_Toc115513007"一個(gè)完全使用AS2編制的飛機(jī)游戲之制作詳解?PAGEREF_Toc115513007\h50?Flash游戲制作常用代碼解析1.獵取隨機(jī)數(shù)隨機(jī)函數(shù)在flash游戲制作中很常用,例如在拼圖游戲中,每次開頭新的游戲時(shí)可以利用隨機(jī)函數(shù)使圖塊獲得新的位置,試想一個(gè)千篇一律的游戲誰會有愛好玩下去?,F(xiàn)在我們有兩種產(chǎn)生隨機(jī)數(shù)的方式:random()和Math.random(),舉例來講,如果我們相隨機(jī)賦給x一個(gè)0-5的數(shù),我們可以使用x=random(6)或者x=Math。random()*5。但這兩種方式產(chǎn)生的隨機(jī)數(shù)是有區(qū)分的,用random(6)方法返回的x是0〈=x〈=5的整數(shù),而另外一種返回的x則是0〈=x<5的小數(shù)。試著在第一幀中寫入下面的AS,并在其次幀創(chuàng)建內(nèi)容幀以形成循環(huán):x=random(6);?y=Math.random()*5;?trace("x=”+x+",y="+y);在output窗口中將得到以下數(shù)據(jù):。.。?x=1,y=3.66887632058933

x=2,y=4.39878350123763?x=0,y=0.522367884404957?x=3,y=2.95675310306251

x=5,y=4.03038211166859?x=2,y=0。223042098805308

..。區(qū)分一目了然.2.獲得鼠標(biāo)及MC(MovieClip)的位置另外一個(gè)在flash游戲制作使用頻率比較高的參數(shù)就是坐標(biāo)了,鼠標(biāo)的坐標(biāo)和MC的坐標(biāo)的獲得方式是不同的,鼠標(biāo)的坐標(biāo)可以用_xmouse和_ymouse獲得,MC的坐標(biāo)可以用MovieClip。_x和MovieClip._y獲得。值得注意的是在獲得坐標(biāo)時(shí)要考慮實(shí)際需要的坐標(biāo)值是相對的還是肯定的,下面給出了一個(gè)典型的獲得鼠標(biāo)相對坐標(biāo)和肯定坐標(biāo)的例子(例1):其中淺色的正方形是一個(gè)被命名為mc的MovieClip,四個(gè)文本框?qū)傩跃辉O(shè)置為DynamicText(請參閱《HYPERLINK"http://www.yesky.com/20020703/1618733.shtml"\t"_blank”FlashMX文本工具詳解》),場景中的兩個(gè)用于獲得變量x_timeline和y_timeline(肯定坐標(biāo)),正方形中的兩個(gè)用于獲得變量x_movieclip和y_movieclip(相對坐標(biāo)),為了獲得變量,需要在文本框的屬性面板中的Var屬性中分別填入相應(yīng)的變量名,與上面例子形成循環(huán)的方式一樣,在第一幀中寫下面的AS,其次幀創(chuàng)建為內(nèi)容幀:x_timeline=_root._xmouse;

y_timeline=_root._ymouse;?x_movieclip=mc。_xmouse;

y_movieclip=mc._ymouse;注意:場景的坐標(biāo)原點(diǎn)為其左上角,坐標(biāo)值向右向下遞增,為正值(這與我們通常意義的坐標(biāo)并不相同);MC的坐標(biāo)原點(diǎn)是編輯MC時(shí)的中心,坐標(biāo)象限見圖1.獲得MC坐標(biāo)的方法與上面說的大同小異,我們將在下面的MC屬性簡介中做介紹。3.MC常用屬性簡介屬性用法說明可獲得可設(shè)置取值范圍_x?_yMC._x?MC._y返回/設(shè)置MC的橫縱坐標(biāo)值YY數(shù)值_xscale

_yscaleMC._xscale?MC。_yscale返回設(shè)置MC的x/y軸縮放比例YY數(shù)值_alphaMC._alpha返回/設(shè)置MC的透明度YY0—100_visibleMC。_visible返回/設(shè)置MC的可見性YYtrue;false_width?_h(yuǎn)eightMC._width?MC._height返回/設(shè)置MC的寬/高值YY數(shù)值_rotat(yī)ionMC._rotation返回/設(shè)置MC的角度YY數(shù)值

_currentframeMC._currentframe

返回MC的當(dāng)前幀YN-_totalframesMC._totalframes返回MC的總幀數(shù)YN—_framesloadedMC._framesloaded返回已下載幀數(shù)YN-_nameMC。_name返回/設(shè)置MC的名稱YY4。推斷按鍵既然是游戲,當(dāng)然就要響應(yīng)玩家的各種反應(yīng),除了鼠標(biāo),最直接的就是鍵盤了。響應(yīng)鍵盤無非是推斷玩家按下了哪一個(gè)鍵或者組合鍵,要實(shí)現(xiàn)這些其實(shí)很簡潔,我們既可以通過按鈕或MC的大事來響應(yīng)按鍵,也可以通過幀上的動作來響應(yīng),舉例說明:(1)按鈕的keyPress方法:先說按鈕,按鈕除了響應(yīng)鼠標(biāo)的一些動作(如:rollOver,release..。)之外還有幾個(gè)是響應(yīng)固定按鍵的(如Enter,Left,Home,PageDown。..),下面我們就來制作一個(gè)。建立一個(gè)按鈕,拖到場景中,捆綁下面的AS:on(keyPress”"){

trace("按下了Left鍵”);?}這樣當(dāng)我們在測試的環(huán)境下按下左方向鍵后,output窗口就會顯示出"按下了Left鍵"。下面說說怎樣使MC響應(yīng)按鍵更簡潔的按鍵。(2)MC響應(yīng)單個(gè)按鍵:onClipEvent(keyDown){?if(Key.isDown(72)){?trace(”按下了H鍵");?}?}這樣在測試的環(huán)境下按下H鍵,output窗口就會顯示出"按下了H鍵”,其中72是H鍵的keyCode值(其他按鍵的keyCode值將在附錄中給出),如果不知道某個(gè)鍵的keyCode值也沒關(guān)系,Flash為我們供應(yīng)了getCode函數(shù),將上面AS中的72替換成Key。getCode("H”)會得到同樣的效果。(3)MC響應(yīng)組合鍵:onClipEvent(keyDown){

if(Key。isDown(72)&&Key.isDown(17)){?trace(”您按下的組合鍵是Ctrl+H");?}

}在測試的環(huán)境中按下Ctrl+H鍵,output窗口就會顯示出”您按下的組合鍵是Ctrl+H"(4)利用幀上的動作響應(yīng)按鍵:新建一個(gè)flash文件,利用上面講過的:在第一幀寫AS,其次幀創(chuàng)建內(nèi)容幀的方法,使影片形成循環(huán)以便隨時(shí)進(jìn)行推斷,然后在第一幀中寫入下面的幾組代碼,分別進(jìn)行試驗(yàn);如果你使用的是MX,也可以不建立其次幀,而是用試驗(yàn)代碼代替_root.onEnterFrame=function(){...}中的"..."來達(dá)到同樣的效果://①?trace(Key.getCode());//②

if(Key.isDown(72)){?trace("按下了H鍵");?}//③?if(Key.isDown(72)&&Key.isDown(17)){?trace("按下了Ctrl+H組合鍵");?}//④

if(Key.isDown(17)){?if(Key.isDown(72)){?temp=”+H";?}?if(Key.isDown(71)){

temp="+G”;?}

trace(”按下了Ctrl”+temp+"鍵");

}注:對于MC的(2)(3)兩種情況,可以將keyDown大事改為enterFrame大事,其中(2)還可以替換為keyUp大事.附:鍵碼值表字母和數(shù)字鍵的鍵碼值(keyCode)按鍵鍵碼按鍵鍵碼按鍵鍵碼按鍵鍵碼A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69N78W87553F70O79X88654G71P80Y89755H72Q81Z90856I73R82048957

數(shù)字鍵盤上的鍵的鍵碼值(keyCode)功能鍵鍵碼值(keyCode)按鍵鍵碼按鍵鍵碼按鍵鍵碼按鍵鍵碼0968104F1112F71181979105F2113F8119298*106F3114F9120399+107F4115F101214100Enter108F5116F111225101-109F6117F121236102。110

7103/111

掌握鍵鍵碼值(keyCode)按鍵鍵碼按鍵鍵碼按鍵鍵碼按鍵鍵碼BackSpace8Esc27RightArrow39-_189Tab9Spacebar32DownArrow40。>190Clear12PageUp33Insert45/?191Enter13PageDown34Delete46`~192Shift16End35NumLock144[{219Control17Home36;:186\|220Alt18LeftArrow37=+187]}221CapeLock20UpArrow38,〈188'”2225.檢測碰撞(hitTest)目前我們見到的射擊游戲或打老鼠之類的游戲很多都利用了hitTest,hitTest既可以檢測MC與MC的碰撞,也可以檢測鼠標(biāo)與MC的碰撞:hitTest的語法如下:(1)myMovieClip。hitTest(x,y,shapeFlag)這用來檢測鼠標(biāo)的碰撞,x和y分別代表鼠標(biāo)的橫縱坐標(biāo),shapeFlag用來規(guī)定檢測以MovieClip的最大邊界為限或以MovieClip的實(shí)際邊界為限.(2)myMovieClip。hitTest(target)檢測MC之間的碰撞,應(yīng)用起來十分簡潔。6。MC的復(fù)制與卸載MC的復(fù)制,顧名思義就是產(chǎn)生出一個(gè)與目標(biāo)相同的MC(除了name和depth以外),語法為:duplicat(yī)eMovieClip(target,newname,depth)target:被復(fù)制目標(biāo)的名稱;?newname:復(fù)制出的MC的名稱;?depth:復(fù)制出的MC的深度。需要注意,復(fù)制出來的新MC的name最好不要相同,也不要與被復(fù)制的MC的相同,由于這樣會給掌握帶來不行預(yù)期的麻煩;另外depth也是一個(gè)相當(dāng)重要的參數(shù),如果新復(fù)制出的MC與前面某個(gè)復(fù)制的MC的depth屬性相同(即位于通一深度),那么先前被復(fù)制的MC將被新復(fù)制的MC替換掉(不管他們是否屬于同一被復(fù)制目標(biāo)),這個(gè)特性常常被我用來制作鼠標(biāo)跟隨的效果,即炫又簡潔,你試試:)再來說說MC的卸載,大家對這個(gè)MC的復(fù)制的"雙胞胎兄弟”的重視程度似乎遠(yuǎn)不如他的”兄長",由于我常常在論壇中看到類似于"為什么復(fù)制出的MC在跳到其他幀,甚至到其他場景后仍然存在?"的問題,其實(shí)解決方法很簡潔,就是MC的卸載:removeMovieClip(target);只要將要被卸載的MC的name替換掉語句中的target就可以成功的完成卸載任務(wù).7.獵取影片運(yùn)行時(shí)間getTimer();這個(gè)函數(shù)用以返回自影片開頭播放時(shí)起已經(jīng)過的毫秒數(shù),雖然是個(gè)很簡潔的函數(shù),但用利用率卻很高,尤其是在一些需要計(jì)時(shí)的游戲中。需要說明的是:毫秒與秒的計(jì)算公式為1毫秒=1/1000秒;函數(shù)以影片第一次播放的開頭時(shí)刻為0,不受任何其他因素影響,也就是說如果你想從頭開頭計(jì)時(shí),那么只有重起player,或者定義一個(gè)變量來存放getTimer的值,然后用getTimer與變量做減法運(yùn)算以便得到新的運(yùn)行時(shí)間,看下面的例子(例5).8.顏色的設(shè)置說到顏色必須先說說什么是對象,對象就是預(yù)先定義好的用來訪問某些特定類型的信息的集合,大多數(shù)預(yù)定義對象都有自己的方法(被指派給一個(gè)對象的函數(shù)被稱為這個(gè)對象的一個(gè)方法),你可以通過這些方法得到不同類型的返回值或執(zhí)行某個(gè)動作.預(yù)定義對象包括一般對象和頂級對象,一般對象在使用前需要創(chuàng)建(我們將要提到的Color對象就屬于這一類),而頂級對象則可以直接調(diào)用(入下面要說的Math對象)?下面我們簡略介紹一下Color對象,它包含四種方法:getRGB():返回由最后一次setRGB調(diào)用設(shè)置的數(shù)值;?getTransform():返回由最后一次setTransform調(diào)用設(shè)置的轉(zhuǎn)換值;?setRGB(0xRRGGBB):指定Color對象實(shí)例的RGB顏色,調(diào)用此方法會掩蓋由setTransform方法設(shè)置的任何以前的設(shè)置;?setTransform(colorTransformObject):設(shè)置Color對象實(shí)例的顏色轉(zhuǎn)換信息colorTransformObject參數(shù)是通過newObject構(gòu)造函數(shù)創(chuàng)建的通用對象它具有指定顏色的紅、綠、藍(lán)和alpha(透明度)成分百分比和偏移量數(shù)值的參數(shù),顏色轉(zhuǎn)換對象的參數(shù)與"高級效果”對話框中的設(shè)置相對應(yīng),定義如下:ra是紅色成分的百分比(-100到100)?rb是紅色成分的偏移量(-255到255)?ga是綠色成分的百分比(—100到100)

gb是綠色成分的偏移量(—255到255)?ba是藍(lán)色成分的百分比(-100到100)

bb是藍(lán)色成分的偏移量(—255到255)?aa是alpha的百分比(-100到100)?ab是alpha的偏移量(—255到255)myColorTransform=newObject();?myColorTransform。ra=50;?myColorTransform。rb=244;?myColorTransform.ga=40;?myColorTransform.gb=112;?myColorTransform。ba=12;

myColorTransform。bb=90;?myColorTransform.aa=40;?myColorTransform。ab=70;也可使用以下語法來創(chuàng)建colorTransformObject參數(shù):myColorTransform={ra:'50',rb:'244’,ga:'40',gb:’112',ba:'12’,bb:'90',aa:'40',ab:'70’}下面的例子展現(xiàn)了為一個(gè)目標(biāo)電影創(chuàng)建一個(gè)新的Color對象,使用Object構(gòu)造器創(chuàng)建一個(gè)顏色轉(zhuǎn)變對象以及使用setTransform方法將這個(gè)顏色轉(zhuǎn)變對象傳遞給一個(gè)Color對象的過程://為目標(biāo)MC創(chuàng)建一個(gè)名為myColord的對象

myColor=newColor(MC);

//使用一般對象Object對象創(chuàng)建一個(gè)名為myColorTransform的顏色轉(zhuǎn)變對象

myColorTransform=newObject;?//為myColorTransform設(shè)置值?myColorTransform={ra:’50',rb:'244',ga:'40',gb:'112’,ba:'12',bb:'90',aa:’40’,ab:'70'};?//將顏色轉(zhuǎn)變對象和為MC創(chuàng)建的顏色對象關(guān)聯(lián)起來

myColor.setTransform(myColorTransform);.9.三角函數(shù)的運(yùn)用三角函數(shù)屬于Flash中的頂級對象----Math,一提到這個(gè)名詞很多人是不是會感到”恐懼”,但在游戲的制作中它可是必不行少的。這里我們利用Mat(yī)h的at(yī)an方法來制作一個(gè)永久指向鼠標(biāo)的指針(例6),其他的三角函數(shù)以及數(shù)學(xué)函數(shù)的用法和注意事項(xiàng)請參考附錄中的數(shù)學(xué)函數(shù)表。新建一個(gè)MC,畫一個(gè)長度為70的水平指向右側(cè)的箭頭(箭頭根部放在中心點(diǎn)上),回到場景,Ctrl+J修改影片的大小為200*200,將指針從庫中拖入場景,命名為”pointer",修改坐標(biāo)為100*100,在主timeline的第一幀中寫如下AS:x=_xmouse-100;?y=_ymouse-100;

//將坐標(biāo)中心移到場景的中心

tan=Math.at(yī)an(y/x)*180/Mat(yī)h。PI;?//注意要使用弧度表示的角度值?if(x〉=0&&y〉=0){?r=Math。round(tan);?}elseif(x>=0&&y<0){?r=Math.round(360+tan);?}else{?r=Math.round(180+tan);?}?//推斷各種不同的情況,通過運(yùn)算使r值在0-360之間?pointer._rotation=r;?//將r值付給_rotation放置一個(gè)用來顯示r值的文本框?qū)傩詾椋膟namicText,獵取變量(Var)為"r",其次幀建立內(nèi)容幀,Ctrl+Enter測試.附:

數(shù)學(xué)函數(shù)表(Math)方法描述語法說明abs計(jì)算并返回由參數(shù)x指定的數(shù)字的肯定值.Math.abs(x)

acos以弧度為單位計(jì)算并返回參數(shù)x中指定的數(shù)字的反余弦值.Mat(yī)h.acos(x)—1。0<=x<=1.0asin以弧度為單位計(jì)算并返回參數(shù)x中指定的數(shù)字的反正弦值.Math。asin(x)—1.0〈=x<=1.0atan計(jì)算并返回參數(shù)x中指定的數(shù)字的反正切值.Math.atan(x)返回值介于負(fù)二分之pi與正二分之pi之間.atan2以弧度為單位計(jì)算并返回y/x的反正切值.返回值表示相對直角三角形對角的角,其中x是臨邊邊長,而y是對邊邊長。Math。atan2(y,x)x/y分別指定點(diǎn)的x坐標(biāo)和y坐標(biāo)ceil返回指定數(shù)字或表達(dá)式的上限值.?dāng)?shù)字的上限值是大于等于該數(shù)字的最接近的整數(shù)。Math。ceil(x)

cos返回由參數(shù)x指定的角的余弦值(介于—1.0與1。0之間的值).必須以弧度為單位指定角度x.Math.cos(x)x為弧度,換算公式為:1弧度=角度*180/Mat(yī)h.PIexp返回e的x次方的值,其中e為自然對數(shù)的底(e),x為參數(shù)x中指定的指數(shù)。Math.exp(x)常數(shù)Mat(yī)h.E可以供應(yīng)e的值.floor返回參數(shù)x中指定的數(shù)字或表達(dá)式的下限值。下限值是小于等于指定數(shù)字或表達(dá)式的最接近的整數(shù).Math。floor(x)表達(dá)式:Math.floor(12。5)將返回值:12log返回參數(shù)x的自然對數(shù).Math。log(x)x〉0max返回兩個(gè)數(shù)中最大者M(jìn)at(yī)h.max(x,y)

min返回兩個(gè)數(shù)中最小者M(jìn)ath.min(x,y)

pow計(jì)算x的y次冪Math。pow(x)

random返回n,其中0<=n<1Math.random()獲得a—b之間的隨機(jī)整數(shù)的公式為:?Math。floor(Math.random()*(b-a+1)+a)round將參數(shù)x的值向上或向下舍入為最接近的整數(shù)并返回值Math。round(x)

sin計(jì)算并返回以弧度為單位指定的角度的正弦值Math.sin(x)換算公式參見cossqrt計(jì)算并返回指定數(shù)字的平方根Math.sqrt(x)x〉=0tan計(jì)算并返回指定角度的正切值Math.tan(x)換算公式參見cos以上我們向大家介紹了Flash游戲制作中最常用的一些ActionScript,掌握了這些基本掌握方法,就可以制作出很多有意思的Flash游戲,同時(shí)在制作的過程中你還會發(fā)現(xiàn)更多的技巧,歡迎HYPERLINK"mailto:yangling@chinabyte.com"投稿和大家一起溝通。FLASH游戲制作基礎(chǔ):響應(yīng)鍵盤的四種方法響應(yīng)鍵盤的方法作為AS中的一個(gè)重要組成部分,在如今已經(jīng)越來越廣泛的使用,尤其是在FLASH游戲制作中,如果缺少了響應(yīng)鍵盤的方法,那是不行能的,而響應(yīng)鍵盤的方法主要的四種,分別是:?1、利用按鈕進(jìn)行檢測

2、利用KEY對象?3、利用鍵盤偵聽的方法?4、利用影片剪輯的keyUp和keyDown大事來實(shí)現(xiàn)響應(yīng)鍵盤?只有嫻熟掌握了這些方法,然后加以變通的話,就會得到很多意想不到的效果,下面我就結(jié)合理論和自己的想法簡要的介紹一下。?第一種響應(yīng)鍵盤的方法:利用按鈕進(jìn)行檢測來實(shí)現(xiàn)響應(yīng)鍵盤?在按鈕的on大事處理函數(shù)中不但可以對鼠標(biāo)大事作出響應(yīng),而且可以對鍵盤大事作出響應(yīng)。如在按鈕的動作面板中加入如下所示的代碼,在敲擊鍵盤上的X鍵時(shí)輸出窗口中將提示:Xispressed?在按鈕上加上:on(keyPress”x”){trace("Xispressed");

}但是要注意的是:檢測鍵盤上的字母鍵時(shí),字母都應(yīng)為小寫。如果要檢測鍵盤中的特殊鍵,Flash中有一些專門的代碼來表示它們,下面列出了一些常用的功能鍵的表示代碼:如要檢測鍵盤上的鍵,可以使用下面的ActionScript:on(keyPress""){

trace("Leftispressed");

}另外,你可以在一個(gè)按鈕中加入若干個(gè)on函數(shù),也可以在一個(gè)on函數(shù)中結(jié)合多種大事,這使您可以為按鈕定義自己熟識常用的快捷鍵,如下所示:on(release,keyPress””){?_root。myMC。prevFrame();?}on(release,keyPress""){_root。myMC.nextFrame();}上面的第一個(gè)語句實(shí)現(xiàn)單擊按鈕或按鍵盤上的左方向鍵,掌握影片剪輯myMC回退1幀,而上面的其次個(gè)語句實(shí)現(xiàn)單擊按鈕或按鍵盤上的右方向鍵,掌握影片剪輯myMC前進(jìn)1幀。其次種響應(yīng)鍵盤的方法:利用Key對象來實(shí)現(xiàn)響應(yīng)鍵盤的操作利用按鈕檢測按鍵動作很有效,但是并不利于檢測持續(xù)按下的鍵,所以不適合于制作某些通過鍵盤掌握的游戲.這時(shí),您就需要用到Key對象.Key對象包含在動作面板的“對象”/“影片"名目下面,它由Flash內(nèi)置的一系列方法、常量和函數(shù)構(gòu)成。使用Key對象可以檢測某個(gè)鍵是否被按下,如要檢測左方向鍵是否被按下,可以使用如下ActionScript:if(Key.isDown(Key.LEFT)){trace(”Theleftarrowisdown");}函數(shù)Key。isDown返回一個(gè)布爾值,當(dāng)該數(shù)中的參數(shù)對應(yīng)的鍵被按下時(shí)返回true,否則返回false。常量Key。LEFT代表鍵盤上的左方向鍵.當(dāng)左方向鍵被按下時(shí),該函數(shù)返回true。Key對象中的常量代表了鍵盤上相應(yīng)的鍵,下面列出了一些基本的常量:一些功能鍵的表示:Key.BACKSPACEKey。ENTERKey.PGDN?Key。CAPSLOCKKey.ESCAPEKey.RIGHT?Key。CONTROLKey。HOMEKey。SHIFT?Key。DELETEKEYKey。INSERTKey.SPACE?Key。DOWNKey.LEFTKey。TAB?Key.ENDKey。PGUPKey.UP以上是鍵盤上的功能鍵,那么如何表示鍵盤上的字母鍵呢??Key對象供應(yīng)了一個(gè)函數(shù)Key。getCode來實(shí)現(xiàn)這一功能,如下所示:if(Key.isDown(Key。getCode("x”))){trace(”Xispressed”);}上面腳本的意思就是,利用Key.getCode函數(shù)來告知系統(tǒng)你是否按下了x鍵,如果按下了x鍵以后,函數(shù)Key.isDown則會返回true,在輸出窗口就會輸出Xispressed。第三種響應(yīng)鍵盤的方法:利用鍵盤偵聽的方法來實(shí)現(xiàn)響應(yīng)鍵盤(個(gè)人習(xí)慣用這種方法)假設(shè)在影片剪輯的onClipEvent(enterFrame)大事處理函數(shù)中檢測按鍵動作,而影片剪輯所在的時(shí)間軸較長,或計(jì)算機(jī)運(yùn)算速度較慢,就有可能消滅這種情況:即當(dāng)在鍵盤上按下某個(gè)鍵時(shí)還將來得及處理onClipEvent(enterFrame)函數(shù),那么按鍵動作將被忽視,這樣的話,很多你想要的效果就會無法實(shí)現(xiàn)了.

另外,還有一個(gè)需要解決的問題就是,在某些游戲(如射擊)中,我們需要按一次鍵就執(zhí)行一次動作(放射一發(fā)子彈),即使長時(shí)間按住某個(gè)鍵不放也只能算作一次按鍵,而Key對象并不能區(qū)分是長時(shí)間按住同一個(gè)鍵還是快速地多次按鍵.所以如果要解決這個(gè)問題,就需要用到鍵盤偵聽的方法.你可以使用“偵聽器(listener)"來偵聽鍵盤上的按鍵動作。要使用偵聽器之前,首先需要創(chuàng)建它,你可以使用如下所示的命令來告知計(jì)算機(jī)你需要偵聽某個(gè)大事:Key.a(chǎn)ddListener(_root);Key.addListener命令將主時(shí)間軸或某個(gè)影片剪輯作為它的參數(shù),當(dāng)偵聽的大事發(fā)生時(shí),可以用這個(gè)參數(shù)指定的對象來響應(yīng)該大事。上面的代碼指定主時(shí)間軸來響應(yīng)該大事。要讓主時(shí)間軸對該大事作出響應(yīng),還需要設(shè)置一個(gè)相應(yīng)的大事處理函數(shù),否則設(shè)置偵聽器就沒有什么意義了。鍵盤偵聽的大事處理函數(shù)有兩個(gè):onKeyUp和onKeyDown,如下所示:Key.a(chǎn)ddListener(_root);_root。onKeyUp=function(){trace(Key.getAscii());};//代碼的意思是,當(dāng)按下一個(gè)鍵并釋放后,輸出窗口將輸出你按下的那個(gè)鍵的Ascii碼當(dāng)然,你也可以使用影片剪輯作為偵聽鍵盤的對象,只需要使用影片剪輯的路徑代替_root作為Key.addListener命令的參數(shù)就可以了.比如下面代碼:Key。addListener(_root。mc);_root。mc.onKeyUp=function(){trace(Key。getAscii());};代碼的意思是,當(dāng)按下一個(gè)鍵并釋放后,輸出窗口將輸出你按下的那個(gè)鍵的Ascii碼,意思差不多,但是鍵盤偵聽對象不同,一個(gè)是影片mc,一個(gè)是主時(shí)間軸。第四種響應(yīng)鍵盤的方法:利用影片剪輯的keyUp和keyDown大事來實(shí)現(xiàn)響應(yīng)鍵盤最后一種方法很容易被忽視,但是也有肯定的應(yīng)用價(jià)值,最重要的是把概念弄清楚.影片剪輯包含兩個(gè)與鍵盤相關(guān)的大事keyUp和keyDown,使用它們也可以實(shí)現(xiàn)對按鍵大事的響應(yīng)例如下面的代碼:onClipEvent(keyDown){trace(Key。getAscii());}//當(dāng)按下鍵盤上的一個(gè)鍵的時(shí)候,輸出窗口將輸出按下的這個(gè)鍵的Ascii碼值.函數(shù)Key。getAscii表示返回與按鍵相對應(yīng)的ASCII碼,其中ASCII碼是一個(gè)整數(shù),鍵盤上的每個(gè)字符對應(yīng)一個(gè)ASCII碼,如字母A對應(yīng)的ASCII碼為65,B對應(yīng)的ASCII碼為66,a對應(yīng)的ASCII碼為97,b對應(yīng)的ASCII碼為98,+對應(yīng)的ASCII碼為43等。需要注意的是:只有字符鍵才有ASCII碼,鍵盤上的功能鍵是沒有ASCII碼的.?如果我想在輸出窗口中輸出與按鍵相對應(yīng)的字符,那怎么辦??這時(shí)候,你可以使用String對象的fromCharCode函數(shù)將ASCII碼轉(zhuǎn)換成字符,如將上例的代碼改成如下所示:onClipEvent(keyDown){trace(String。fromCharCode(Key.getAscii()));};//意思就是說,當(dāng)按下鍵盤的一個(gè)鍵,輸出按下的這個(gè)鍵相對應(yīng)的字符,當(dāng)然除了功能鍵。?關(guān)于String對象的簡略解釋,大家可以查看動作面板的“對象”/“核心"名目下面。Flash游戲制作--空戰(zhàn)Flash游戲制作-—空戰(zhàn)?

射擊類游戲始終是Flash游戲制作中的一個(gè)熱點(diǎn),大多數(shù)Flash射擊游戲都是都是縱版的,也就是游戲背景的前進(jìn)方向是垂直的,這樣的游戲已經(jīng)司空見慣了.所以這次我們來制作一個(gè)橫版的射擊游戲,游戲背景和飛機(jī)的運(yùn)動方向都是水平的.游戲運(yùn)行后的主界面如圖1所示:圖1游戲說明:此游戲玩家是以第一視角的模式來進(jìn)行的,所謂第一視角就是游戲的界面相當(dāng)于玩家的雙眼,通過這樣的形式,可以使游戲達(dá)到一種格外逼真的效果,仿佛您已經(jīng)置身于激烈的游戲之中了.游戲中玩家可以使用鼠標(biāo)掌握屏幕中的瞄準(zhǔn)鏡,瞄準(zhǔn)并射擊從左邊隨機(jī)消滅的敵機(jī),飛機(jī)會以各種路線在空中飛行以避開你的射擊,如果敵機(jī)被射中后,就會從空中跌落下來,相應(yīng)的玩家會得一分,在游戲規(guī)定的100秒內(nèi),盡量擊落更多的敵機(jī)。制作步驟:一:游戲中相應(yīng)元件的制作1.既然是空戰(zhàn)游戲,自然少不了飛機(jī),所以首先來制作游戲中的敵機(jī)。在影片中新建一個(gè)Graphic元件,,命名為gPlane,進(jìn)入元件的編輯狀態(tài)后,可以從外部導(dǎo)入一張飛機(jī)的圖片,然后將其分離,稍稍加工一下即可?;蛘呤褂茫疲靉sh供應(yīng)的強(qiáng)大的繪圖工具自己繪制一架飛機(jī),如圖2所示:圖2有了飛機(jī),還需要一個(gè)飛行員飛機(jī)才可以工作,所以再建一個(gè)Graphic元件,命名為gMan,進(jìn)入元件編輯狀態(tài)后,使用橢圓繪圖工具繪制一個(gè)簡潔的人頭即可,如圖3所示:圖3接下來就需要將飛機(jī)和飛行員組合到一起了,由于游戲中需要使用Action動作腳本對飛機(jī)進(jìn)行掌握,所以需要將最終的組合體制作成Movieclip元件,所以再新建一個(gè)Movieclip元件,進(jìn)入元件的編輯狀態(tài)后,將元件gMan和Gplane分別拖到編輯區(qū),使用鼠標(biāo)調(diào)整其相對位置,如圖4所示:圖4這樣,一架逼真的戰(zhàn)斗機(jī)就制作完成了。?2.飛機(jī)飛行動畫的制作:游戲中飛機(jī)是從游戲窗口左邊隨機(jī)消滅的,但是飛機(jī)的飛行路線是事先確定好的,我們可以在制作過程中依據(jù)實(shí)際需要制作一些飛機(jī)沿肯定路線飛行的Motion動畫,使用GuideLine引導(dǎo)線可以很便利的實(shí)現(xiàn),然后在游戲中分別調(diào)用即可,本游戲預(yù)先制作了三中不同的飛行路線,這里以其中一種舉例說明,其它的制作方法完全類似。新建一個(gè)Movieclip元件,命名為mPlane1,進(jìn)入元件的編輯狀態(tài)后,在圖層layer1的上面插入一個(gè)引導(dǎo)層,在引導(dǎo)層上使用鉛筆工具任意繪制一條曲線,然后將圖層連續(xù)到第120楨,如圖5所示:圖5然后將元件mPlane拖到圖層layer1的第1關(guān)鍵楨,放置到曲線的左邊的開頭端點(diǎn),飛機(jī)會自動吸附到此端點(diǎn),接著在屬性面板中設(shè)置飛機(jī)的Instancename為airplane。在第120楨插入一個(gè)關(guān)鍵禎,同樣的將飛機(jī)拖到曲線的右邊的端點(diǎn),也會自動吸附上去,最后,在第1禎到第120禎的任意禎上單擊鼠標(biāo)右鍵,選取Creat(yī)MotionTween命令即可,這樣就創(chuàng)建了飛機(jī)從曲線的左端點(diǎn)沿曲線運(yùn)動到右端點(diǎn)的運(yùn)動效果。最后還需要添加一個(gè)圖層Action,用來設(shè)置Action動作腳本,在第1楨添加如下as:varplaneDepth=_root。pDepth;在最后一楨(120禎)添加如下as:_root.numPlane--;this。removeMovieClip();依據(jù)同樣的方法分別制作元件mPl(wèi)ane2和mPl(wèi)ane3,和mPlane1的唯一不同點(diǎn)就是引導(dǎo)層的曲線不一樣.3.制作瞄準(zhǔn)鏡:游戲中玩家可以掌握的唯一對象就是瞄準(zhǔn)鏡,可以用它瞄準(zhǔn)并射擊敵機(jī),新建一個(gè)Movieclip元件,命名為mPointer,在編輯區(qū)中使用橢圓工具繪制一個(gè)正圓,然后在正圓中繪制四條方向不同的直線即可,如圖6所示:圖64.云彩的制作:既然是空戰(zhàn),天空中當(dāng)然少不了白云,并且適當(dāng)?shù)脑谟螒蛑屑尤氚自七@樣的對象,可以使游戲更生動和逼真,游戲中的白云是使用Action動作腳本隨機(jī)復(fù)制并進(jìn)行掌握的,所以這里我們新建一個(gè)Movieclip元件,命名為mCloud,進(jìn)入元件編輯狀態(tài)后,使用鉛筆工具的Ink繪制模式,繪制一個(gè)彎曲的閉合區(qū)域,并將圖層連續(xù)到第5禎,如圖7所示:圖7

接下來需要添加復(fù)制和掌握白云的Action動作腳本,新建一個(gè)圖層,分別在第1,3,5三禎插入三個(gè)關(guān)鍵禎,給第一禎添加如下AS:this。_x=575;this._y=30+random(300);speed=2+random(5);給第3禎添加如下AS:this._x-=spee(cuò)d;給第5禎添加如下AS:if(this._x〈-35)else{gotoAndPl(wèi)ay(_currentframe—2);}5.飛機(jī)被擊落的效果:游戲中飛機(jī)如果被擊落,如果簡潔的來做,只需要設(shè)置飛機(jī)消滅即可,不過為了增強(qiáng)游戲的觀賞性,我們這里專門來設(shè)計(jì)以下飛機(jī)被擊落的效果,而且會帶有爆炸的聲音。新建一個(gè)Movieclip元件,命名為mDown,進(jìn)入元件的編輯狀態(tài)后,首先添加三個(gè)圖層分別為down,planedown和explord,在圖層explord的第一禎繪制一個(gè)如圖8所示的多角形,并填充上適當(dāng)?shù)念伾簣D8然后在第3禎插入一個(gè)關(guān)鍵禎,在屬性面板上設(shè)置此多角形的Alpha透明度值為15%,最后建立第1到第3禎的Motion運(yùn)動過渡,這樣就實(shí)現(xiàn)了飛機(jī)被擊中的瞬間爆炸的效果。接下來制作飛機(jī)下落的效果。在圖層planedown的第2禎插入一個(gè)關(guān)鍵禎,將元件Mplane拖進(jìn)編輯區(qū),使用旋轉(zhuǎn)工具將飛機(jī)旋轉(zhuǎn)90度,使飛機(jī)頭沖下,然后在第10禎插入一個(gè)關(guān)鍵禎,將飛機(jī)向下移動一段直線距離,并適當(dāng)降低飛機(jī)的Alpha透明度值,最后建立第2禎到第10禎的Motion運(yùn)動過渡效果,這樣飛機(jī)被擊中后下落并消滅的效果也有了。不過如果飛機(jī)在下落過程中,能有冒煙的效果就更完善了.所以我們在圖層down的第4禎插入一個(gè)關(guān)鍵禎,然后使用橢圓工具繪制個(gè)豎直的扁橢圓,并填充上黑色,在第10禎插入關(guān)鍵禎,調(diào)整橢園的外形并設(shè)置降低其透明度,同樣建立一個(gè)Motion運(yùn)動過渡效果。?然后插入一個(gè)圖層sound,用來設(shè)置飛機(jī)下落的聲音效果,從外部導(dǎo)入一個(gè)爆炸的音效,然后選中圖層sound,從屬性面板的sound下拉列表中選擇所導(dǎo)如的身影,最后將此層也連續(xù)到第10禎,時(shí)間線如圖9所示:圖9最后還要添加一些Action動作腳本對其加以掌握。新建一個(gè)圖層ACTION,在第1,2,和10禎分別插入一個(gè)關(guān)鍵禎,然后給第一禎添加如下AS:this._x=_root。expX;this。_y=_root.expY;給第2禎添加如下AS:this._x=_root。expX;this。_y=_root。expY;給第10禎添加如下As:this.removeMovieClip();6.制作記時(shí)器:游戲是有肯定時(shí)間掌握的,所以還需要添加一個(gè)記時(shí)器,使用動態(tài)文本可以便利的實(shí)現(xiàn),新建一個(gè)Movieclip元件,命名為mTime,在元件編輯狀態(tài)下,使用文本工具繪制一個(gè)矩形文本框,然后在屬性面板中設(shè)置其為Dynamic動態(tài)文本,這樣就可以用Action對其中的內(nèi)容加以掌握了,設(shè)置其變量名為rTime,然后在文本框前面輸入提示信息,如圖10所示:圖10然后新建一個(gè)層,在第一禎添加如下AS:now=newDat(yī)e();//新建一個(gè)Date對象startTime=now。getTime();//設(shè)置開頭時(shí)間為系統(tǒng)時(shí)間playTime=_root.playTime;rTime=playTime;在第三禎添加如下AS:now=newDate();currentTime=now。getTime();rTime=playTime—int((currentTime-startTime)/1000);if(!rTime){_root.gotoAndPl(wèi)ay(”reStart");stop();}//顯示并掌握記時(shí)器中的時(shí)間在第5禎添加如下AS:gotoAndPlay(_currentframe-2);到此為止,游戲中需要的元件大部分籌備好了,下面就可以開頭布置主場景了。?二:布置主場景1.首先將默認(rèn)圖層layer1重命名為background,使用矩形工具繪制一個(gè)和舞臺一樣大小的矩形,并填充上天藍(lán)色,將圖層連續(xù)到第50禎。2.新建兩個(gè)圖層分別為start和gun,在start圖層上用來設(shè)置游戲的開頭界面,使用文本工具輸入游戲的名稱,并將瞄準(zhǔn)器放置到圖層gun中,并在屬性面板中設(shè)置瞄準(zhǔn)器的Instancename為pointer,如圖11所示:圖113.在圖層gun的第22禎插入關(guān)鍵禎,輸入游戲時(shí)間已到的消息,如圖12所示;圖124.新建一個(gè)圖層命名為score&time,用來放置記分器和記時(shí)器,將記時(shí)器mTime放到舞臺下面靠右的位置,然后在下面靠左的位置繪制一個(gè)動態(tài)文本框,設(shè)置其變量名為score,用來記錄游戲的得分,如圖13所示:圖13

三:給游戲添加Action動作腳本最后的游戲就是添加Action動作腳本了。新建一個(gè)圖層,命名為ACTION,設(shè)置第2禎的禎標(biāo)簽為start,設(shè)置第9禎的禎標(biāo)簽為dup,設(shè)置第15禎的禎標(biāo)簽為gotoDup,設(shè)置第22禎的禎標(biāo)簽為reStart。在第一禎添加如下AS:Mouse.hide();startDrag("/pointer",true);//游戲開頭前,首先隱藏鼠標(biāo),然后使瞄準(zhǔn)器變?yōu)榭赏蟿訝顟B(tài)sShoot=newSound();sShoot。attachSound(”sShoot");//新建一個(gè)sound聲音對象,然后從外部導(dǎo)入射擊的音效Sshoot,使用attachsound方//法將此聲音綁定sExp=newSound();sExp。attachSound("sExp");////新建一個(gè)sound聲音對象,然后從外部導(dǎo)入射擊的音效Sexp,使用attachsound方//法將此聲音綁定stop();在第2禎添加如下AS:score=0;//設(shè)置初始得分為0playTime=100;//設(shè)置游戲時(shí)間為100秒varexpX;varexpY;//定義兩變量,代表飛機(jī)的坐標(biāo)cDepth=100;pDepth=0;numPlane=0;numCloud=0;//定義變量,分別代表飛機(jī)和云的深度和數(shù)量_root。attachMovie(”mP","pointer",300);startDrag("/pointer",true);在第9禎添加如下AS:if(Math.random()〈0.2&&numCloud<5){numCloud++;_root。attachMovie("mCloud",”c”+cDepth,cDepth);cDepth=(++cDepth)%100+100;}//復(fù)制白云if(Math.random()<0。3&&numPlane<7){_root.attachMovie("mPlane"+(1+random(3)),"P"+pDepth,pDepth);numPlane++;with(eval(”/p”+pDepth)){_x=-20-random(120);_y=150+random(60);}pDepth=(++pDepth)%100;}//復(fù)制飛機(jī),并使用隨機(jī)函數(shù)設(shè)置飛機(jī)消滅的坐標(biāo)在第15禎添加如下AS:gotoAndPl(wèi)ay("Dup");//返回到禎Dup復(fù)制飛機(jī)在第22禎添加如下AS:_root。pointer。removeMovieClip();//游戲結(jié)束后,從游戲中刪除瞄準(zhǔn)器在第50禎添加如下AS:Mouse.show();//顯示鼠標(biāo)for(i=0;i<100;i++){removeMovieClip(”/c"+(100+i));removeMovieClip("/p"+i);}stop();//刪除游戲中全部復(fù)制出來的飛機(jī)和白云最后的時(shí)間線如圖14所示:圖14到這里,一款精彩的空戰(zhàn)射擊游戲就制作完成了,您可以依據(jù)相像的制作方法,制作一款比較傳統(tǒng)的縱版射擊游戲。此實(shí)例其實(shí)是設(shè)計(jì)空戰(zhàn)類射擊游戲的通用思路,其它飛行射擊游戲其實(shí)是在此基礎(chǔ)上擴(kuò)展成的,所以還可以進(jìn)一步豐富游戲的功能,加強(qiáng)游戲的可玩性.Flash飛行游戲制作全解Flash始終是大家喜愛的交互多媒體開發(fā)工具,Flash游戲則以簡潔、耐玩,而深受用戶喜愛.看似簡潔多變的Flash游戲,其制作并不難.本文以一款傳統(tǒng)的飛行游戲制作為例,說明其制作全過程,信任在你閱讀完本文后,也可以通過自己的想象,制作出心儀的游戲來。一、飛行游戲制作思路分析這是一款相對傳統(tǒng)的飛行游戲。它使用上、下、左、右鍵掌握飛機(jī)的運(yùn)行方向,Shift鍵放射子彈,空格鍵放射導(dǎo)彈。游戲中共有兩種敵機(jī),一號敵機(jī)的飛行方向是由下而下,二號敵機(jī)是由左至右,兩種敵機(jī)的飛行軌跡都是弧線的、隨機(jī)的。?在游戲中我們添加了幾組數(shù)據(jù),以增加游戲的刺激性。例如,裝備庫的設(shè)計(jì),它可以隨機(jī)添加一些裝備,以供主控飛機(jī)使用。這其中包括有子彈的速度、導(dǎo)彈的個(gè)數(shù)、飛機(jī)數(shù)量,以及主控飛機(jī)的飛行速度。裝備庫的設(shè)計(jì),會大大增加游戲的娛樂性。另外,在BOSS敵機(jī)的設(shè)計(jì)中,我們使用了利用弧度換算角度的公式,使BOSS敵機(jī)可以放射一種子彈,跟蹤主控飛機(jī)的坐標(biāo)。信任在這些設(shè)計(jì)中,會讓大家品嘗到不同的數(shù)學(xué)公式,在游戲制作中的妙用。注:本文全部源程序及素材下載地址為HYPERLINK”http://www.itbook.com.cn/hdb/fj_game.rar"http://www.itbook。com。cn/hdb/fj_game.rar.?二、游戲界面設(shè)計(jì)1.制作開頭界面每一個(gè)游戲都有一個(gè)開頭界面,供游戲者選擇,我們在第1幀中制作游戲的開頭界面。啟動FlashMX2004,請?jiān)诘?幀中加入stop()代碼,然后制作一個(gè)start按鈕,當(dāng)按鈕點(diǎn)擊時(shí)跳轉(zhuǎn)到下一場景.如圖2所示。按鈕的內(nèi)容如下:on(press){gotoAndPlay("Scene2",1)}

2.制作星空按下Shift+F2組合鍵,打開“場景”面板,點(diǎn)擊“+”按鈕新增加一個(gè)場景,進(jìn)入場景2,開頭游戲的制作.將“圖層1”更名為scene以制作星空。其實(shí),這些星空都是用圓形繪圖工具繪制上去的,它們的大小只有一個(gè)或是兩個(gè)像素,我們可以使用復(fù)制,然后再對齊的方式,使它們布滿場景。?全選這些亮點(diǎn),按F8鍵將其轉(zhuǎn)換成影片剪輯,將這個(gè)影片剪輯復(fù)制3次,然后放置在一個(gè)影片剪輯中,讓它們并排向下循環(huán)移動即可。3。變量設(shè)置新建一個(gè)圖層,命名為fenshu,使用文本輸入工具,在屏幕下方輸入:“現(xiàn)在分?jǐn)?shù):"、“子彈速度”、“子彈類型:”、“導(dǎo)彈數(shù)量:”、“飛機(jī)速度:”、“飛機(jī)數(shù)量:"等文字內(nèi)容.新建一個(gè)圖層,命名為score,在工具箱中點(diǎn)擊“文本工具”按鈕,然后在“屬性”面板中更改其為“動態(tài)文本”,在“現(xiàn)在分?jǐn)?shù):”的后面拖出一個(gè)輸入框,在“屬性”面板中將“變量”更改為score。?使用相同的方法,新建shot_spee(cuò)d圖層,在“子彈速度:”后制作一個(gè)動態(tài)文本框,變量名稱為shot_spee(cuò)d。新建一個(gè)shot_sty圖層,在“子彈類型:"后制作一個(gè)變量名為shotsty_txt的動態(tài)文本框。新建一個(gè)plane_spee(cuò)d圖層,在“飛機(jī)速度:”后制作一個(gè)plane_speed的動態(tài)文本框。新建missilenum圖層,使用繪圖工具繪制作如圖5所示的圖形,選取這些圖形按下F8鍵將其轉(zhuǎn)換成影片剪輯,命名為missilenum_mc,在“屬性”面板“實(shí)例名稱"框中輸入“missile_num"。

進(jìn)入missilenum_mc影片剪輯,在第3、4、5、6幀處按F6建立關(guān)鍵幀,在第6幀處加入stop()代碼,然后將第1幀中的導(dǎo)彈全部刪去,第2幀保留一個(gè),第3幀保留2個(gè),以此類推?;氐綀鼍?新建一個(gè)plane_num圖層,取實(shí)例名為“planenum_mc”,依照上一步的方法制作。?回到場景,在第1幀中加入如下代碼,新建一個(gè)info圖層文件夾,將上面的這些圖層放置其中:score=0shot_spee(cuò)d=10shotsty_txt="單彈道”missilenum=6plane_speed=10planenum=4shot_sty=1missile_text=6代碼說明:這里主要是為這些變量賦值,score等于分?jǐn)?shù),初始值為0,shot_spee(cuò)d等于子彈速度,初始值為10;shotsyt_txt等于子彈類型,開頭時(shí)它為單彈道;missilenum表示導(dǎo)彈數(shù)量,初始值為6;plane_speed表示飛機(jī)速度,初始值為10;planenum表示飛機(jī)數(shù)量,初始值為4;子彈類型的變量等于1;導(dǎo)彈類型的變量等于6.三、主機(jī)制作1.主機(jī)結(jié)構(gòu)在場景中新建一個(gè)plane圖層,使用繪圖工具繪制一個(gè)飛機(jī).?選中飛機(jī)按F8鍵將其轉(zhuǎn)換成影片剪輯,名稱為plane_mc,雙擊進(jìn)入該影片剪輯,新建一個(gè)圖層,繪制一個(gè)矩形,如圖8所示,按F8鍵將其轉(zhuǎn)換成影片剪輯,取實(shí)例名稱為plane_h(yuǎn)it,再將透明度降為0.由于Flash的碰撞測試是以矩形為準(zhǔn)的,所以,我們繪制矩形影片剪輯,用來碰撞測試?;氐綀鼍?為飛機(jī)影片剪輯取實(shí)例名稱為plane_mc,按F8鍵轉(zhuǎn)換成影片剪輯,雙擊進(jìn)入影片剪輯開頭制作,新建一個(gè)圖層,在第30幀建立關(guān)鍵幀,繪制一個(gè)漸淡的紅色圓球,將其轉(zhuǎn)換成影片剪輯,名稱為plane_bo。如圖9所示。在plane_bo影片剪輯中,第5幀制作它被放大,第10幀縮小變黃,第20幀漸漸消滅。新建一個(gè)圖層,導(dǎo)入音樂文件fx13431_bomb8。mp3,放置在第1幀。雙擊空白區(qū)域回到上一級影片剪輯,新建8個(gè)圖層,分別復(fù)制plane_bo影片剪輯,放置在第30幀以后的位置,隔兩幀放置一個(gè)。等于是讓8個(gè)爆炸的圓球依次播放,仿照爆炸效果.新建一個(gè)圖層,在第1幀加入代碼:plane_mc。_y=550plane_mc._x=0_root.command_bl=false_root。hittest_bl=false_root.shot_bl=false代碼說明:在第1幀,我們讓主控飛機(jī)的Y坐標(biāo)等于550,X坐標(biāo)等于0,讓代表可以被掌握的command_bl變量為假,表示在這1幀時(shí),主控飛機(jī)不能被掌握,hittest_bl敵機(jī)的熱區(qū)檢測為假,也就是主控飛機(jī)不能被擊爆,shot_bl子彈可以放射的變量為假。在第2幀加入代碼:plane_mc._y—=10plane_mc._alpha=30代碼說明:主控飛機(jī)的Y坐標(biāo)等于Y坐標(biāo)減去10,透明度等于30。在第3幀加入代碼:if(plane_mc._y<=0){gotoAndPlay(4)}else{gotoAndPlay(2)}代碼說明:當(dāng)主控飛機(jī)的坐標(biāo)小于等于0時(shí),開頭播放第4幀,如果不然,將播放第2幀,實(shí)際上等于讓飛機(jī)以10個(gè)坐標(biāo)的速度遞減.在第4幀加入代碼:_root。command_bl=true_root.hittest_bl=false_root.shot_bl=true_root.shot_bl=true_root.shot_sty=1_root.shot_speed=10_root.plane_speed=10_root.missile_num.gotoAndPl(wèi)ay(1)代碼說明:在前3幀中,實(shí)際是一個(gè)讓主控飛機(jī)飛入場景的動畫,而現(xiàn)在,為一些初始變量賦值.在第30幀加入代碼:stop()plane_mc._alpha=100_root.command_bl=true_root.hittest_bl=true代碼說明:在這一幀,我們設(shè)置透明度為100,主機(jī)可以被掌握,碰撞測試也可以開頭。在第31幀加入代碼:_root.command_bl=false_root.hittest_bl=false_root。shot_bl=false代碼說明:如果主控飛機(jī)被擊爆,那么這個(gè)影片剪輯應(yīng)該開頭播放了,主機(jī)不能被掌握,碰撞測試和子彈都不能放射。在第65幀,也就是最后1幀加入代碼:if(_root.planenum_mc。_currentframe〈2){stop()}if(_root.planenum_mc._currentframe!=1){_root.planenum_mc。gotoAndStop(_root.planenum_mc。_currentframe—1)gotoAndPl(wèi)ay(1)}代碼說明:當(dāng)根名目下的planenum_mc影片剪輯的當(dāng)前幀小于2時(shí),本影片剪輯將不再循環(huán)播放。如果planenum_mc影片剪輯的當(dāng)前幀不等于1時(shí),那么代表主控飛機(jī)個(gè)數(shù)的planenum_mc影片剪輯將后退1幀。本影片剪輯將重新開頭播放。也就是說,planenum_mc影片剪輯一共有4幀,在正常情況下,本影片剪輯應(yīng)該也只播放4次,除非有其他的外界程序干擾。2。主機(jī)飛行掌握回到場景中,為主控飛機(jī)的影片剪輯添加實(shí)例名稱為plane,在第1幀加入代碼如下:plane.onEnterFrame=function(){if(command_bl){if(Key.isDown(Key.LEFT)&&plane。_x>30){plane._x—=plane_speed}if(Key。isDown(Key。RIGHT)&&plane。_x〈620){plane._x+=plane_speed}if(Key.isDown(Key。UP)&&plane._y>30){plane._y-=plane_spee(cuò)d}if(Key。isDown(Key。DOWN)&&plane。_y<420){plane。_y+=plane_speed}}代碼說明:當(dāng)plane影片剪輯開頭播放時(shí),每播放1幀執(zhí)行一次。如果command_bl變量為真時(shí),也就是我們剛才設(shè)置的主控飛行開關(guān)為真時(shí);當(dāng)按鍵中的LEFT鍵按下,而且plane影片剪輯的X坐標(biāo)大于30時(shí),plane的X坐標(biāo)等于它的X坐標(biāo)減去plane_spee(cuò)d變量,也就是飛機(jī)開頭向左移動,其他代碼效果相同。3.子彈放射方法回到場景中,新建一個(gè)shot圖層,在場景的外面,使用繪圖工具繪制一個(gè)子彈的外形,如圖10所示,選中它并按F8鍵轉(zhuǎn)換成影片剪輯,名稱為shot,輸入實(shí)例名稱為shot.雙擊進(jìn)入影片剪輯,在第2幀建立關(guān)鍵幀,放置2個(gè)這樣的子彈在中心位置。在第3幀放置4個(gè)這樣的子彈在中心位置.第1幀加入stop()代碼,讓影片剪輯在開頭停止播放.回到場景中,給shot對象加入如下代碼(注意是給對象加代碼,而不是幀),方法是鼠標(biāo)右鍵選擇子彈對象,選擇“動作”命令,然后輸入代碼.onClipEvent(enterFrame){this._y—=10+random(_root.shot_speed)}代碼說明:當(dāng)影片剪輯開頭播放時(shí),它的Y坐標(biāo)等于它的Y坐標(biāo)減去10加上shot_speed的隨機(jī)數(shù)。在場景的第1幀,我們剛才主控飛機(jī)加掌握代碼的地方,在第1行加上n=0,在其他按鍵代碼的后面,添加如下代碼:if(Key.isDown(Key。SHIFT)&&_root.shot_bl){if(n<50){shot.duplicateMovieClip("shot”+n,n+100)_root["shot”+n].gotoAndStop(shot_sty)_root["shot"+n]._x=_root。plane。_x_root[”shot"+n]._y=_root.plane._y—10n++}elseif(n>=50){n=0}}代碼說明:當(dāng)按下Shift鍵時(shí),且shot_bl子彈掌握開關(guān)為真時(shí);當(dāng)n小于50時(shí),shot影片剪輯開頭復(fù)制,一共復(fù)制50個(gè),圖層深度為N+100;復(fù)制品跳轉(zhuǎn)到shot_sty變量所指的那一幀;復(fù)制品的X坐標(biāo)等于主控飛機(jī)的X坐標(biāo);復(fù)制品的Y坐標(biāo)等于主控飛機(jī)的Y坐標(biāo)減10;N遞增;當(dāng)N大于等于50時(shí),N等于0。這段代碼實(shí)際上就是一個(gè)子彈的放射過程,當(dāng)我們按下Shift鍵時(shí),影片剪輯就會不斷地進(jìn)行復(fù)制,而起始坐標(biāo)永久都是飛機(jī)的坐標(biāo),影片剪輯本身的代碼中,使它不停的向上運(yùn)動,就形成了完整的子彈放射過程。4.導(dǎo)彈放射方法在場景中新建一個(gè)圖層,命名為missile,使用繪圖工具繪制一個(gè)導(dǎo)彈,如圖11所示,轉(zhuǎn)換成影片剪輯,取實(shí)例名為missile,進(jìn)入影片剪輯開頭編輯工作。在影片剪輯中,再次選取導(dǎo)彈按F8轉(zhuǎn)換成影片剪輯,在第15幀建立關(guān)鍵幀,將導(dǎo)彈的坐標(biāo)放置在X:0,Y:-175的位置上,從第1幀建立動畫,新建一個(gè)圖層,在第15幀繪制一個(gè)爆炸的圓形漸變圖,類似飛機(jī)爆炸的那種,但要大一些。選中該圖層,按F8鍵轉(zhuǎn)換成影片剪輯,在第40、70幀建立關(guān)鍵幀,在第40幀把爆炸效果縮放到格外大,大到你喜愛的程度,然后建立Motion運(yùn)動。新建一個(gè)圖層,導(dǎo)入音樂文件fx13443_explomed.mp3放在第1幀,在第1幀加入如下代碼:stop()this._x=5000this._y=5000代碼說明:在第1幀停止播放,影片剪輯的X坐標(biāo)和Y坐標(biāo)等于5000?;氐綀鼍爸?,在主控飛機(jī)的代碼中,加入如下代碼:if(Key。isDown(Key。SPACE)&&_root。missile._currentframe==1&&shot_bl){if(missile_text>1){missile.play()missile。_x=plane._xmissile._y=plane._ymissile_text--missile_num.gotoAndStop(missile_text)}}代碼說明:當(dāng)按下空格鍵時(shí),且missile影片剪輯的當(dāng)前幀等于1,當(dāng)shot_bl子彈開關(guān)為開時(shí);當(dāng)missile_text變量大于1時(shí);導(dǎo)彈影片剪輯開頭播放;導(dǎo)彈影片剪輯的坐標(biāo)等于主控飛機(jī)的坐標(biāo);Missile_num也就是我們最初制作的導(dǎo)彈數(shù)量的影片剪輯跳轉(zhuǎn)到missile_text變量的位置。四、制作裝備彩蛋回到場景中,新建一個(gè)圖層,命名為brand,使用繪圖工具繪制如圖12所示的內(nèi)容。轉(zhuǎn)換成影片剪輯。把這個(gè)圖形放置在Y:1000,然后進(jìn)入影片剪輯編輯,選取文字內(nèi)容,按F8鍵轉(zhuǎn)換成影片剪輯,命名為brand_mc,取實(shí)例名為brand_mc。進(jìn)入brand_mc影片剪輯,在第1幀輸入內(nèi)容“子彈加速”,在第2、3、4、5幀分別輸入內(nèi)容“子彈樣式”、“飛機(jī)加速"、“增加飛機(jī)”、“增加導(dǎo)彈”。在第1幀加入gotoAndStop(random(5)+1)代碼,讓影片剪輯直接跳轉(zhuǎn)到相應(yīng)的幀。回到場景中,選取這個(gè)裝備圖標(biāo),為對象加入代碼,記得嗎?在子彈制作中,我們已經(jīng)給對象加過代碼了:onClipEvent(enterFrame){this。_y+=5if(this._y〉=3000){this._y=—1000this._visible=1}if(this。_y〈=-100){this。brand_mc.gotoAndPlay(1)this。_x=random(650)}if(this.hitTest(_root。plane)){this._visible=0this。_y+=200if(this。brand_mc._currentframe==1){_root.shot_spee(cuò)d=_root.shot_speed+10}if(this.brand_mc._currentframe==2&&_root。shot_sty<4){_root.shot_sty+=1if(_root。shot_sty==2){_root。shotsty_txt=”雙彈道"}elseif(_root。shot_sty==3){_root.shotsty_txt="四彈道"}}if(this.brand_mc._currentframe==3){_root。plane_speed+=1}if(this.brand_mc._currentframe==4&&_root.planenum_mc._currentframe<5){_root。planenum_mc.gotoAndStop(_root。planenum_mc._currentframe+1)}if(this.brand_mc._currentframe==4&&_root。planenum_mc._currentframe==4){_root.score+=2000}if(this.brand_mc._currentframe==5&&_root.missile_num。_currentframe<6){_root.missile_num。gotoAndStop(_root.missile_num._currentframe+1)}}}代碼說明:當(dāng)影片剪輯開頭播放時(shí),它的坐標(biāo)等于它的坐標(biāo)加上5。當(dāng)它的坐標(biāo)大于等于3000時(shí),它的坐標(biāo)等于負(fù)1000,它的顯示參數(shù)為可視。當(dāng)它的坐標(biāo)等于負(fù)100時(shí),它影片剪輯中的brand_mc也就是剛才制作的文字影片剪輯開頭播放第1幀,實(shí)際上也就是跳轉(zhuǎn)到任意一幀,它的X坐標(biāo)等于650的隨機(jī)數(shù),等于是屏幕的任意位置。當(dāng)它碰撞到主控飛機(jī)時(shí),它的顯示為假,也就是說它變得不行見,同時(shí)它的坐標(biāo)加上200.當(dāng)它的brand_mc影片剪輯的當(dāng)前幀等于1時(shí),shot_speed子彈速度等于再加上10.當(dāng)它的brand_mc影片剪輯的當(dāng)前幀等于2而且子彈樣式小于4時(shí),子彈樣式等于再加上1,如果子彈樣式等于2,那么shotsyt_txt動態(tài)文本就顯示雙彈道,如果等于3就顯示四彈道。如果它的brand_mc影片剪輯的當(dāng)前幀等于3,那么plane_speed飛機(jī)速度就等于再加上1,如果它的brand_mc影片剪輯的當(dāng)前幀等于4而且planenum_mc的當(dāng)前幀小于5,那么planenum_mc影片剪輯的當(dāng)前幀等于再加上1幀,這樣就等于增加了一個(gè)主控飛機(jī)。如果它的brand_mc影片剪輯的當(dāng)前幀等于4而且planenum_mc的當(dāng)前幀等于4,也就是說主控飛機(jī)已經(jīng)滿了,那么就加上2000分。如果它的brand_mc影片剪輯的當(dāng)前幀等于5而且missile_num導(dǎo)彈數(shù)量的當(dāng)前幀小于6,那么就增加一個(gè)導(dǎo)彈。五、制作敵機(jī)1.一號敵機(jī)制作方法新建一個(gè)圖層,命名為enemy_a,繪制一個(gè)如圖13所示的敵機(jī),選中該敵機(jī)按F8鍵,轉(zhuǎn)換成影片剪輯,名稱為enemya_mc,實(shí)例名也是enemya_mc,雙擊進(jìn)入影片剪輯.在第1幀加入代碼stop(),讓影片停止播放,新建一個(gè)圖層,在新圖層的第2幀制作一個(gè)爆炸的效果,在最后幀加入如下代碼,這等于刪去上一級影片剪輯,而分?jǐn)?shù)再加上100.removeMovieClip(_parent。_parent)_root。score+=100再次新建一個(gè)圖層,在第2幀放入fx13431_bomb8。mp3音樂文件,記得要使用stream數(shù)據(jù)流的方式,雙擊空白區(qū)域回到場景。在場景中選中該影片剪輯,放置在場景以外的左上角,再次按F8鍵轉(zhuǎn)換成影片剪輯,名稱為enemya_eft,實(shí)例名為enemy_a,進(jìn)入影片剪輯,在圖層1上加入一個(gè)引導(dǎo)圖層,使用繪圖工具繪制一條曲線,如圖14所示。將兩個(gè)圖層都延緩到第60幀,將第1幀的敵機(jī)放置在引導(dǎo)線的起始,在最后1幀將敵機(jī)放置到引導(dǎo)線的結(jié)尾,建立Motion動畫,在最后1幀加入removeMovieClip(_parent)代碼,刪去上一級影片剪輯。這也就是說,無論敵機(jī)是被擊爆的,還是飛行結(jié)束,它都將消滅,所不同的就是加不加分而已。2。一號敵機(jī)的復(fù)制方法回到場景,選中敵機(jī)按F8鍵轉(zhuǎn)換成影片剪輯,名稱為enemya,實(shí)例名稱為enemy_a,選取后再次按F8鍵轉(zhuǎn)換成影片剪輯,名稱為enemy_a,實(shí)例名稱為enemya。雙擊進(jìn)入影片剪輯.在第10幀按F5鍵,新建一個(gè)圖層,在第1幀,加入代碼:enemya_i=0enemya_max=10enemya._visible=0代碼說明:Enemya_i變量等于0,enemya_max變量等于10,而敵機(jī)為不顯示。在圖層2的第2幀加入代碼:if(enemya_i〈ENEMYA_M(jìn)AX){<p>enemya.duplicateMovieClip("enemya"+enemya_i,enemya_i)this["enemya”+enemya_i]._x=random(650)this["enemya”+enemya_i]。_y=enemya。_y—random(200)+100enemya_i++}if(enemya_i>=enemya_max){enemya_i=0}代碼說明:當(dāng)enemya_i變量小于enemya_max時(shí),Enemya影片剪輯開頭復(fù)制,復(fù)制品的X坐標(biāo)等于650的隨機(jī)數(shù),復(fù)制品的Y坐標(biāo)等于敵機(jī)的Y坐標(biāo)減去200的隨機(jī)數(shù)再加上100;Enemya_i變量遞增;當(dāng)enemya_i變量大于等于enemya_max變量時(shí),它的值為0.在第10幀加入代碼gotoAndPlay(2),這樣就可以完成復(fù)制,讓每10幀,就復(fù)制一個(gè)敵機(jī)。3.一號敵機(jī)碰撞測試右鍵點(diǎn)擊敵機(jī),選擇“動作命令”,為對象加入如下代碼:onClipEvent(enterFrame){if(this.hitTest(_root.plane.plane_mc.plane_hit)){this.enemy_a。enemya_mc.play()this.enemy_a.enemya_mc。_x=this。enemy_a.enemya_mc。_xthis。enemy_a.enemya_mc。_y=this.enemy_a.enemya_mc._y_root。plane。play()}if(this.hitTest(_root。missile)){this.enemy_a。enemya_mc。play()this.enemy_a.enemya_mc._x=this.enemy_a。enemya_mc._xthis。enemy_a.enemya_mc._y=this.enemy_a。enemya_mc._y}for(j=1;j<50;j++){if(this.hitTest(_root["shot"+j])){this.enemy_a.enemya_mc。play()this。enemy_a.enemya_mc。_x=this.enemy_a.enemya_mc。_xthis.enemy_a.enemya_mc。_y=this.enemy_a。enemya_mc。_y}}}

溫馨提示

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

評論

0/150

提交評論