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

下載本文檔

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

文檔簡(jiǎn)介

—PAGE69—往鏈點(diǎn)點(diǎn)通共享資源,了解更多請(qǐng)登錄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)鍵盤(pán)的四種方法?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制作互動(dòng)的小人 PAGEREF_Toc115513005\h45HYPERLINK\l"_Toc115513006"常見(jiàn)的飛機(jī)放射子彈的掌握 PAGEREF_Toc115513006\h49HYPERLINK\l"_Toc115513007"一個(gè)完全使用AS2編制的飛機(jī)游戲之制作詳解?PAGEREF_Toc115513007\h50?Flash游戲制作常用代碼解析1.獵取隨機(jī)數(shù)隨機(jī)函數(shù)在flash游戲制作中很常用,例如在拼圖游戲中,每次開(kāi)頭新的游戲時(shí)可以利用隨機(jī)函數(shù)使圖塊獲得新的位置,試想一個(gè)千篇一律的游戲誰(shuí)會(huì)有愛(ài)好玩下去。現(xiàn)在我們有兩種產(chǎn)生隨機(jī)數(shù)的方式:random()和Math.random(),舉例來(lái)講,如果我們相隨機(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ù)。試著在第一幀中寫(xiě)入下面的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)值是相對(duì)的還是肯定的,下面給出了一個(gè)典型的獲得鼠標(biāo)相對(duì)坐標(biāo)和肯定坐標(biāo)的例子(例1):其中淺色的正方形是一個(gè)被命名為mc的MovieClip,四個(gè)文本框?qū)傩跃辉O(shè)置為DynamicText(請(qǐng)參閱《HYPERLINK"http://www.yesky.com/20020703/1618733.shtml"\t"_blank”FlashMX文本工具詳解》),場(chǎng)景中的兩個(gè)用于獲得變量x_timeline和y_timeline(肯定坐標(biāo)),正方形中的兩個(gè)用于獲得變量x_movieclip和y_movieclip(相對(duì)坐標(biāo)),為了獲得變量,需要在文本框的屬性面板中的Var屬性中分別填入相應(yīng)的變量名,與上面例子形成循環(huán)的方式一樣,在第一幀中寫(xiě)下面的AS,其次幀創(chuàng)建為內(nèi)容幀:x_timeline=_root._xmouse;

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

y_movieclip=mc._ymouse;注意:場(chǎng)景的坐標(biāo)原點(diǎn)為其左上角,坐標(biāo)值向右向下遞增,為正值(這與我們通常意義的坐標(biāo)并不相同);MC的坐標(biāo)原點(diǎn)是編輯MC時(shí)的中心,坐標(biāo)象限見(jiàn)圖1.獲得MC坐標(biāo)的方法與上面說(shuō)的大同小異,我們將在下面的MC屬性簡(jiǎn)介中做介紹。3.MC常用屬性簡(jiǎn)介屬性用法說(shuō)明可獲得可設(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的可見(jiàn)性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的名稱(chēng)YY4。推斷按鍵既然是游戲,當(dāng)然就要響應(yīng)玩家的各種反應(yīng),除了鼠標(biāo),最直接的就是鍵盤(pán)了。響應(yīng)鍵盤(pán)無(wú)非是推斷玩家按下了哪一個(gè)鍵或者組合鍵,要實(shí)現(xiàn)這些其實(shí)很簡(jiǎn)潔,我們既可以通過(guò)按鈕或MC的大事來(lái)響應(yīng)按鍵,也可以通過(guò)幀上的動(dòng)作來(lái)響應(yīng),舉例說(shuō)明:(1)按鈕的keyPress方法:先說(shuō)按鈕,按鈕除了響應(yīng)鼠標(biāo)的一些動(dòng)作(如:rollOver,release..。)之外還有幾個(gè)是響應(yīng)固定按鍵的(如Enter,Left,Home,PageDown。..),下面我們就來(lái)制作一個(gè)。建立一個(gè)按鈕,拖到場(chǎng)景中,捆綁下面的AS:on(keyPress”"){

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

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

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

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

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

7103/111

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

myColor=newColor(MC);

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

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

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

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

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);?}?//推斷各種不同的情況,通過(guò)運(yùn)算使r值在0-360之間?pointer._rotation=r;?//將r值付給_rotation放置一個(gè)用來(lái)顯示r值的文本框?qū)傩詾椋膟namicText,獵取變量(Var)為"r",其次幀建立內(nèi)容幀,Ctrl+Enter測(cè)試.附:

數(shù)學(xué)函數(shù)表(Math)方法描述語(yǔ)法說(shuō)明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的反正切值.返回值表示相對(duì)直角三角形對(duì)角的角,其中x是臨邊邊長(zhǎng),而y是對(duì)邊邊長(zhǎng)。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為自然對(duì)數(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的自然對(duì)數(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)換算公式參見(jiàn)cossqrt計(jì)算并返回指定數(shù)字的平方根Math.sqrt(x)x〉=0tan計(jì)算并返回指定角度的正切值Math.tan(x)換算公式參見(jiàn)cos以上我們向大家介紹了Flash游戲制作中最常用的一些ActionScript,掌握了這些基本掌握方法,就可以制作出很多有意思的Flash游戲,同時(shí)在制作的過(guò)程中你還會(huì)發(fā)現(xiàn)更多的技巧,歡迎HYPERLINK"mailto:yangling@chinabyte.com"投稿和大家一起溝通。FLASH游戲制作基礎(chǔ):響應(yīng)鍵盤(pán)的四種方法響應(yīng)鍵盤(pán)的方法作為AS中的一個(gè)重要組成部分,在如今已經(jīng)越來(lái)越廣泛的使用,尤其是在FLASH游戲制作中,如果缺少了響應(yīng)鍵盤(pán)的方法,那是不行能的,而響應(yīng)鍵盤(pán)的方法主要的四種,分別是:?1、利用按鈕進(jìn)行檢測(cè)

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

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

trace("Leftispressed");

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

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

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

接下來(lái)需要添加復(fù)制和掌握白云的Action動(dòng)作腳本,新建一個(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ī)如果被擊落,如果簡(jiǎn)潔的來(lái)做,只需要設(shè)置飛機(jī)消滅即可,不過(guò)為了增強(qiáng)游戲的觀賞性,我們這里專(zhuān)門(mén)來(lái)設(shè)計(jì)以下飛機(jī)被擊落的效果,而且會(huì)帶有爆炸的聲音。新建一個(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)動(dòng)過(guò)渡,這樣就實(shí)現(xiàn)了飛機(jī)被擊中的瞬間爆炸的效果。接下來(lái)制作飛機(jī)下落的效果。在圖層planedown的第2禎插入一個(gè)關(guān)鍵禎,將元件Mplane拖進(jìn)編輯區(qū),使用旋轉(zhuǎn)工具將飛機(jī)旋轉(zhuǎn)90度,使飛機(jī)頭沖下,然后在第10禎插入一個(gè)關(guān)鍵禎,將飛機(jī)向下移動(dòng)一段直線(xiàn)距離,并適當(dāng)降低飛機(jī)的Alpha透明度值,最后建立第2禎到第10禎的Motion運(yùn)動(dòng)過(guò)渡效果,這樣飛機(jī)被擊中后下落并消滅的效果也有了。不過(guò)如果飛機(jī)在下落過(guò)程中,能有冒煙的效果就更完善了.所以我們?cè)趫D層down的第4禎插入一個(gè)關(guān)鍵禎,然后使用橢圓工具繪制個(gè)豎直的扁橢圓,并填充上黑色,在第10禎插入關(guān)鍵禎,調(diào)整橢園的外形并設(shè)置降低其透明度,同樣建立一個(gè)Motion運(yùn)動(dòng)過(guò)渡效果。?然后插入一個(gè)圖層sound,用來(lái)設(shè)置飛機(jī)下落的聲音效果,從外部導(dǎo)入一個(gè)爆炸的音效,然后選中圖層sound,從屬性面板的sound下拉列表中選擇所導(dǎo)如的身影,最后將此層也連續(xù)到第10禎,時(shí)間線(xiàn)如圖9所示:圖9最后還要添加一些Action動(dòng)作腳本對(duì)其加以掌握。新建一個(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í)器,使用動(dòng)態(tài)文本可以便利的實(shí)現(xiàn),新建一個(gè)Movieclip元件,命名為mTime,在元件編輯狀態(tài)下,使用文本工具繪制一個(gè)矩形文本框,然后在屬性面板中設(shè)置其為Dynamic動(dòng)態(tài)文本,這樣就可以用Action對(duì)其中的內(nèi)容加以掌握了,設(shè)置其變量名為rTime,然后在文本框前面輸入提示信息,如圖10所示:圖10然后新建一個(gè)層,在第一禎添加如下AS:now=newDat(yī)e();//新建一個(gè)Date對(duì)象startTime=now。getTime();//設(shè)置開(kāi)頭時(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);到此為止,游戲中需要的元件大部分籌備好了,下面就可以開(kāi)頭布置主場(chǎng)景了。?二:布置主場(chǎng)景1.首先將默認(rèn)圖層layer1重命名為background,使用矩形工具繪制一個(gè)和舞臺(tái)一樣大小的矩形,并填充上天藍(lán)色,將圖層連續(xù)到第50禎。2.新建兩個(gè)圖層分別為start和gun,在start圖層上用來(lái)設(shè)置游戲的開(kāi)頭界面,使用文本工具輸入游戲的名稱(chēng),并將瞄準(zhǔn)器放置到圖層gun中,并在屬性面板中設(shè)置瞄準(zhǔn)器的Instancename為pointer,如圖11所示:圖113.在圖層gun的第22禎插入關(guān)鍵禎,輸入游戲時(shí)間已到的消息,如圖12所示;圖124.新建一個(gè)圖層命名為score&time,用來(lái)放置記分器和記時(shí)器,將記時(shí)器mTime放到舞臺(tái)下面靠右的位置,然后在下面靠左的位置繪制一個(gè)動(dòng)態(tài)文本框,設(shè)置其變量名為score,用來(lái)記錄游戲的得分,如圖13所示:圖13

三:給游戲添加Action動(dòng)作腳本最后的游戲就是添加Action動(dòng)作腳本了。新建一個(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);//游戲開(kāi)頭前,首先隱藏鼠標(biāo),然后使瞄準(zhǔn)器變?yōu)榭赏蟿?dòng)狀態(tài)sShoot=newSound();sShoot。attachSound(”sShoot");//新建一個(gè)sound聲音對(duì)象,然后從外部導(dǎo)入射擊的音效Sshoot,使用attachsound方//法將此聲音綁定sExp=newSound();sExp。attachSound("sExp");////新建一個(gè)sound聲音對(duì)象,然后從外部導(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ù)制出來(lái)的飛機(jī)和白云最后的時(shí)間線(xiàn)如圖14所示:圖14到這里,一款精彩的空戰(zhàn)射擊游戲就制作完成了,您可以依據(jù)相像的制作方法,制作一款比較傳統(tǒng)的縱版射擊游戲。此實(shí)例其實(shí)是設(shè)計(jì)空戰(zhàn)類(lèi)射擊游戲的通用思路,其它飛行射擊游戲其實(shí)是在此基礎(chǔ)上擴(kuò)展成的,所以還可以進(jìn)一步豐富游戲的功能,加強(qiáng)游戲的可玩性.Flash飛行游戲制作全解Flash始終是大家喜愛(ài)的交互多媒體開(kāi)發(fā)工具,Flash游戲則以簡(jiǎn)潔、耐玩,而深受用戶(hù)喜愛(ài).看似簡(jiǎn)潔多變的Flash游戲,其制作并不難.本文以一款傳統(tǒng)的飛行游戲制作為例,說(shuō)明其制作全過(guò)程,信任在你閱讀完本文后,也可以通過(guò)自己的想象,制作出心儀的游戲來(lái)。一、飛行游戲制作思路分析這是一款相對(duì)傳統(tǒng)的飛行游戲。它使用上、下、左、右鍵掌握飛機(jī)的運(yùn)行方向,Shift鍵放射子彈,空格鍵放射導(dǎo)彈。游戲中共有兩種敵機(jī),一號(hào)敵機(jī)的飛行方向是由下而下,二號(hào)敵機(jī)是由左至右,兩種敵機(jī)的飛行軌跡都是弧線(xiàn)的、隨機(jī)的。?在游戲中我們添加了幾組數(shù)據(jù),以增加游戲的刺激性。例如,裝備庫(kù)的設(shè)計(jì),它可以隨機(jī)添加一些裝備,以供主控飛機(jī)使用。這其中包括有子彈的速度、導(dǎo)彈的個(gè)數(shù)、飛機(jī)數(shù)量,以及主控飛機(jī)的飛行速度。裝備庫(kù)的設(shè)計(jì),會(huì)大大增加游戲的娛樂(lè)性。另外,在BOSS敵機(jī)的設(shè)計(jì)中,我們使用了利用弧度換算角度的公式,使BOSS敵機(jī)可以放射一種子彈,跟蹤主控飛機(jī)的坐標(biāo)。信任在這些設(shè)計(jì)中,會(huì)讓大家品嘗到不同的數(shù)學(xué)公式,在游戲制作中的妙用。注:本文全部源程序及素材下載地址為HYPERLINK”http://www.itbook.com.cn/hdb/fj_game.rar"http://www.itbook。com。cn/hdb/fj_game.rar.?二、游戲界面設(shè)計(jì)1.制作開(kāi)頭界面每一個(gè)游戲都有一個(gè)開(kāi)頭界面,供游戲者選擇,我們?cè)诘?幀中制作游戲的開(kāi)頭界面。啟動(dòng)FlashMX2004,請(qǐng)?jiān)诘?幀中加入stop()代碼,然后制作一個(gè)start按鈕,當(dāng)按鈕點(diǎn)擊時(shí)跳轉(zhuǎn)到下一場(chǎng)景.如圖2所示。按鈕的內(nèi)容如下:on(press){gotoAndPlay("Scene2",1)}

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

進(jìn)入missilenum_mc影片剪輯,在第3、4、5、6幀處按F6建立關(guān)鍵幀,在第6幀處加入stop()代碼,然后將第1幀中的導(dǎo)彈全部刪去,第2幀保留一個(gè),第3幀保留2個(gè),以此類(lèi)推?;氐綀?chǎng)景,新建一個(gè)plane_num圖層,取實(shí)例名為“planenum_mc”,依照上一步的方法制作。?回到場(chǎng)景,在第1幀中加入如下代碼,新建一個(gè)info圖層文件夾,將上面的這些圖層放置其中:score=0shot_spee(cuò)d=10shotsty_txt="單彈道”missilenum=6plane_speed=10planenum=4shot_sty=1missile_text=6代碼說(shuō)明:這里主要是為這些變量賦值,score等于分?jǐn)?shù),初始值為0,shot_spee(cuò)d等于子彈速度,初始值為10;shotsyt_txt等于子彈類(lèi)型,開(kāi)頭時(shí)它為單彈道;missilenum表示導(dǎo)彈數(shù)量,初始值為6;plane_speed表示飛機(jī)速度,初始值為10;planenum表示飛機(jī)數(shù)量,初始值為4;子彈類(lèi)型的變量等于1;導(dǎo)彈類(lèi)型的變量等于6.三、主機(jī)制作1.主機(jī)結(jié)構(gòu)在場(chǎng)景中新建一個(gè)plane圖層,使用繪圖工具繪制一個(gè)飛機(jī).?選中飛機(jī)按F8鍵將其轉(zhuǎn)換成影片剪輯,名稱(chēng)為plane_mc,雙擊進(jìn)入該影片剪輯,新建一個(gè)圖層,繪制一個(gè)矩形,如圖8所示,按F8鍵將其轉(zhuǎn)換成影片剪輯,取實(shí)例名稱(chēng)為plane_h(yuǎn)it,再將透明度降為0.由于Flash的碰撞測(cè)試是以矩形為準(zhǔn)的,所以,我們繪制矩形影片剪輯,用來(lái)碰撞測(cè)試?;氐綀?chǎng)景,為飛機(jī)影片剪輯取實(shí)例名稱(chēng)為plane_mc,按F8鍵轉(zhuǎn)換成影片剪輯,雙擊進(jìn)入影片剪輯開(kāi)頭制作,新建一個(gè)圖層,在第30幀建立關(guān)鍵幀,繪制一個(gè)漸淡的紅色圓球,將其轉(zhuǎn)換成影片剪輯,名稱(chēng)為plane_bo。如圖9所示。在plane_bo影片剪輯中,第5幀制作它被放大,第10幀縮小變黃,第20幀漸漸消滅。新建一個(gè)圖層,導(dǎo)入音樂(lè)文件fx13431_bomb8。mp3,放置在第1幀。雙擊空白區(qū)域回到上一級(jí)影片剪輯,新建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代碼說(shuō)明:在第1幀,我們讓主控飛機(jī)的Y坐標(biāo)等于550,X坐標(biāo)等于0,讓代表可以被掌握的command_bl變量為假,表示在這1幀時(shí),主控飛機(jī)不能被掌握,hittest_bl敵機(jī)的熱區(qū)檢測(cè)為假,也就是主控飛機(jī)不能被擊爆,shot_bl子彈可以放射的變量為假。在第2幀加入代碼:plane_mc._y—=10plane_mc._alpha=30代碼說(shuō)明:主控飛機(jī)的Y坐標(biāo)等于Y坐標(biāo)減去10,透明度等于30。在第3幀加入代碼:if(plane_mc._y<=0){gotoAndPlay(4)}else{gotoAndPlay(2)}代碼說(shuō)明:當(dāng)主控飛機(jī)的坐標(biāo)小于等于0時(shí),開(kāi)頭播放第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)代碼說(shuō)明:在前3幀中,實(shí)際是一個(gè)讓主控飛機(jī)飛入場(chǎng)景的動(dòng)畫(huà),而現(xiàn)在,為一些初始變量賦值.在第30幀加入代碼:stop()plane_mc._alpha=100_root.command_bl=true_root.hittest_bl=true代碼說(shuō)明:在這一幀,我們?cè)O(shè)置透明度為100,主機(jī)可以被掌握,碰撞測(cè)試也可以開(kāi)頭。在第31幀加入代碼:_root.command_bl=false_root.hittest_bl=false_root。shot_bl=false代碼說(shuō)明:如果主控飛機(jī)被擊爆,那么這個(gè)影片剪輯應(yīng)該開(kāi)頭播放了,主機(jī)不能被掌握,碰撞測(cè)試和子彈都不能放射。在第65幀,也就是最后1幀加入代碼:if(_root.planenum_mc。_currentframe〈2){stop()}if(_root.planenum_mc._currentframe?。剑?{_root.planenum_mc。gotoAndStop(_root.planenum_mc。_currentframe—1)gotoAndPl(wèi)ay(1)}代碼說(shuō)明:當(dāng)根名目下的planenum_mc影片剪輯的當(dāng)前幀小于2時(shí),本影片剪輯將不再循環(huán)播放。如果planenum_mc影片剪輯的當(dāng)前幀不等于1時(shí),那么代表主控飛機(jī)個(gè)數(shù)的planenum_mc影片剪輯將后退1幀。本影片剪輯將重新開(kāi)頭播放。也就是說(shuō),planenum_mc影片剪輯一共有4幀,在正常情況下,本影片剪輯應(yīng)該也只播放4次,除非有其他的外界程序干擾。2。主機(jī)飛行掌握回到場(chǎng)景中,為主控飛機(jī)的影片剪輯添加實(shí)例名稱(chēng)為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}}代碼說(shuō)明:當(dāng)plane影片剪輯開(kāi)頭播放時(shí),每播放1幀執(zhí)行一次。如果command_bl變量為真時(shí),也就是我們剛才設(shè)置的主控飛行開(kāi)關(guān)為真時(shí);當(dāng)按鍵中的LEFT鍵按下,而且plane影片剪輯的X坐標(biāo)大于30時(shí),plane的X坐標(biāo)等于它的X坐標(biāo)減去plane_spee(cuò)d變量,也就是飛機(jī)開(kāi)頭向左移動(dòng),其他代碼效果相同。3.子彈放射方法回到場(chǎng)景中,新建一個(gè)shot圖層,在場(chǎng)景的外面,使用繪圖工具繪制一個(gè)子彈的外形,如圖10所示,選中它并按F8鍵轉(zhuǎn)換成影片剪輯,名稱(chēng)為shot,輸入實(shí)例名稱(chēng)為shot.雙擊進(jìn)入影片剪輯,在第2幀建立關(guān)鍵幀,放置2個(gè)這樣的子彈在中心位置。在第3幀放置4個(gè)這樣的子彈在中心位置.第1幀加入stop()代碼,讓影片剪輯在開(kāi)頭停止播放.回到場(chǎng)景中,給shot對(duì)象加入如下代碼(注意是給對(duì)象加代碼,而不是幀),方法是鼠標(biāo)右鍵選擇子彈對(duì)象,選擇“動(dòng)作”命令,然后輸入代碼.onClipEvent(enterFrame){this._y—=10+random(_root.shot_speed)}代碼說(shuō)明:當(dāng)影片剪輯開(kāi)頭播放時(shí),它的Y坐標(biāo)等于它的Y坐標(biāo)減去10加上shot_speed的隨機(jī)數(shù)。在場(chǎng)景的第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}}代碼說(shuō)明:當(dāng)按下Shift鍵時(shí),且shot_bl子彈掌握開(kāi)關(guān)為真時(shí);當(dāng)n小于50時(shí),shot影片剪輯開(kāi)頭復(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è)子彈的放射過(guò)程,當(dāng)我們按下Shift鍵時(shí),影片剪輯就會(huì)不斷地進(jìn)行復(fù)制,而起始坐標(biāo)永久都是飛機(jī)的坐標(biāo),影片剪輯本身的代碼中,使它不停的向上運(yùn)動(dòng),就形成了完整的子彈放射過(guò)程。4.導(dǎo)彈放射方法在場(chǎng)景中新建一個(gè)圖層,命名為missile,使用繪圖工具繪制一個(gè)導(dǎo)彈,如圖11所示,轉(zhuǎn)換成影片剪輯,取實(shí)例名為missile,進(jìn)入影片剪輯開(kāi)頭編輯工作。在影片剪輯中,再次選取導(dǎo)彈按F8轉(zhuǎn)換成影片剪輯,在第15幀建立關(guān)鍵幀,將導(dǎo)彈的坐標(biāo)放置在X:0,Y:-175的位置上,從第1幀建立動(dòng)畫(huà),新建一個(gè)圖層,在第15幀繪制一個(gè)爆炸的圓形漸變圖,類(lèi)似飛機(jī)爆炸的那種,但要大一些。選中該圖層,按F8鍵轉(zhuǎn)換成影片剪輯,在第40、70幀建立關(guān)鍵幀,在第40幀把爆炸效果縮放到格外大,大到你喜愛(ài)的程度,然后建立Motion運(yùn)動(dòng)。新建一個(gè)圖層,導(dǎo)入音樂(lè)文件fx13443_explomed.mp3放在第1幀,在第1幀加入如下代碼:stop()this._x=5000this._y=5000代碼說(shuō)明:在第1幀停止播放,影片剪輯的X坐標(biāo)和Y坐標(biāo)等于5000?;氐綀?chǎng)景中,在主控飛機(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)}}代碼說(shuō)明:當(dāng)按下空格鍵時(shí),且missile影片剪輯的當(dāng)前幀等于1,當(dāng)shot_bl子彈開(kāi)關(guān)為開(kāi)時(shí);當(dāng)missile_text變量大于1時(shí);導(dǎo)彈影片剪輯開(kāi)頭播放;導(dǎo)彈影片剪輯的坐標(biāo)等于主控飛機(jī)的坐標(biāo);Missile_num也就是我們最初制作的導(dǎo)彈數(shù)量的影片剪輯跳轉(zhuǎn)到missile_text變量的位置。四、制作裝備彩蛋回到場(chǎng)景中,新建一個(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)的幀?;氐綀?chǎng)景中,選取這個(gè)裝備圖標(biāo),為對(duì)象加入代碼,記得嗎?在子彈制作中,我們已經(jīng)給對(duì)象加過(guò)代碼了: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)}}}代碼說(shuō)明:當(dāng)影片剪輯開(kāi)頭播放時(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也就是剛才制作的文字影片剪輯開(kāi)頭播放第1幀,實(shí)際上也就是跳轉(zhuǎn)到任意一幀,它的X坐標(biāo)等于650的隨機(jī)數(shù),等于是屏幕的任意位置。當(dāng)它碰撞到主控飛機(jī)時(shí),它的顯示為假,也就是說(shuō)它變得不行見(jiàn),同時(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動(dòng)態(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,也就是說(shuō)主控飛機(jī)已經(jīng)滿(mǎn)了,那么就加上2000分。如果它的brand_mc影片剪輯的當(dāng)前幀等于5而且missile_num導(dǎo)彈數(shù)量的當(dāng)前幀小于6,那么就增加一個(gè)導(dǎo)彈。五、制作敵機(jī)1.一號(hào)敵機(jī)制作方法新建一個(gè)圖層,命名為enemy_a,繪制一個(gè)如圖13所示的敵機(jī),選中該敵機(jī)按F8鍵,轉(zhuǎn)換成影片剪輯,名稱(chēng)為enemya_mc,實(shí)例名也是enemya_mc,雙擊進(jìn)入影片剪輯.在第1幀加入代碼stop(),讓影片停止播放,新建一個(gè)圖層,在新圖層的第2幀制作一個(gè)爆炸的效果,在最后幀加入如下代碼,這等于刪去上一級(jí)影片剪輯,而分?jǐn)?shù)再加上100.removeMovieClip(_parent。_parent)_root。score+=100再次新建一個(gè)圖層,在第2幀放入fx13431_bomb8。mp3音樂(lè)文件,記得要使用stream數(shù)據(jù)流的方式,雙擊空白區(qū)域回到場(chǎng)景。在場(chǎng)景中選中該影片剪輯,放置在場(chǎng)景以外的左上角,再次按F8鍵轉(zhuǎn)換成影片剪輯,名稱(chēng)為enemya_eft,實(shí)例名為enemy_a,進(jìn)入影片剪輯,在圖層1上加入一個(gè)引導(dǎo)圖層,使用繪圖工具繪制一條曲線(xiàn),如圖14所示。將兩個(gè)圖層都延緩到第60幀,將第1幀的敵機(jī)放置在引導(dǎo)線(xiàn)的起始,在最后1幀將敵機(jī)放置到引導(dǎo)線(xiàn)的結(jié)尾,建立Motion動(dòng)畫(huà),在最后1幀加入removeMovieClip(_parent)代碼,刪去上一級(jí)影片剪輯。這也就是說(shuō),無(wú)論敵機(jī)是被擊爆的,還是飛行結(jié)束,它都將消滅,所不同的就是加不加分而已。2。一號(hào)敵機(jī)的復(fù)制方法回到場(chǎng)景,選中敵機(jī)按F8鍵轉(zhuǎn)換成影片剪輯,名稱(chēng)為enemya,實(shí)例名稱(chēng)為enemy_a,選取后再次按F8鍵轉(zhuǎn)換成影片剪輯,名稱(chēng)為enemy_a,實(shí)例名稱(chēng)為enemya。雙擊進(jìn)入影片剪輯.在第10幀按F5鍵,新建一個(gè)圖層,在第1幀,加入代碼:enemya_i=0enemya_max=10enemya._visible=0代碼說(shuō)明: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}代碼說(shuō)明:當(dāng)enemya_i變量小于enemya_max時(shí),Enemya影片剪輯開(kāi)頭復(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.一號(hào)敵機(jī)碰撞測(cè)試右鍵點(diǎn)擊敵機(jī),選擇“動(dòng)作命令”,為對(duì)象加入如下代碼: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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論