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

下載本文檔

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

文檔簡介

—PAGE69—往鏈點點通共享資源,了解更多請登錄HYPERLINK"www。WL566。com"www.WL566.com目錄TOC\o"1-1”\h\z\uHYPERLINK\l"_Toc115512999"Flash游戲制作常用代碼解析?PAGEREF_Toc115512999\h3HYPERLINK\l"_Toc115513000"FLASH游戲制作基礎:響應鍵盤的四種方法?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"常見的飛機放射子彈的掌握 PAGEREF_Toc115513006\h49HYPERLINK\l"_Toc115513007"一個完全使用AS2編制的飛機游戲之制作詳解?PAGEREF_Toc115513007\h50?Flash游戲制作常用代碼解析1.獵取隨機數(shù)隨機函數(shù)在flash游戲制作中很常用,例如在拼圖游戲中,每次開頭新的游戲時可以利用隨機函數(shù)使圖塊獲得新的位置,試想一個千篇一律的游戲誰會有愛好玩下去。現(xiàn)在我們有兩種產(chǎn)生隨機數(shù)的方式:random()和Math.random(),舉例來講,如果我們相隨機賦給x一個0-5的數(shù),我們可以使用x=random(6)或者x=Math。random()*5。但這兩種方式產(chǎn)生的隨機數(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.獲得鼠標及MC(MovieClip)的位置另外一個在flash游戲制作使用頻率比較高的參數(shù)就是坐標了,鼠標的坐標和MC的坐標的獲得方式是不同的,鼠標的坐標可以用_xmouse和_ymouse獲得,MC的坐標可以用MovieClip。_x和MovieClip._y獲得。值得注意的是在獲得坐標時要考慮實際需要的坐標值是相對的還是肯定的,下面給出了一個典型的獲得鼠標相對坐標和肯定坐標的例子(例1):其中淺色的正方形是一個被命名為mc的MovieClip,四個文本框?qū)傩跃辉O置為DynamicText(請參閱《HYPERLINK"http://www.yesky.com/20020703/1618733.shtml"\t"_blank”FlashMX文本工具詳解》),場景中的兩個用于獲得變量x_timeline和y_timeline(肯定坐標),正方形中的兩個用于獲得變量x_movieclip和y_movieclip(相對坐標),為了獲得變量,需要在文本框的屬性面板中的Var屬性中分別填入相應的變量名,與上面例子形成循環(huán)的方式一樣,在第一幀中寫下面的AS,其次幀創(chuàng)建為內(nèi)容幀:x_timeline=_root._xmouse;

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

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

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

_currentframeMC._currentframe

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

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

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

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

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

bb是藍色成分的偏移量(—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)了為一個目標電影創(chuàng)建一個新的Color對象,使用Object構(gòu)造器創(chuàng)建一個顏色轉(zhuǎn)變對象以及使用setTransform方法將這個顏色轉(zhuǎn)變對象傳遞給一個Color對象的過程://為目標MC創(chuàng)建一個名為myColord的對象

myColor=newColor(MC);

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

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

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

//將坐標中心移到場景的中心

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

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

acos以弧度為單位計算并返回參數(shù)x中指定的數(shù)字的反余弦值.Mat(yī)h.acos(x)—1。0<=x<=1.0asin以弧度為單位計算并返回參數(shù)x中指定的數(shù)字的反正弦值.Math。asin(x)—1.0〈=x<=1.0atan計算并返回參數(shù)x中指定的數(shù)字的反正切值.Math.atan(x)返回值介于負二分之pi與正二分之pi之間.atan2以弧度為單位計算并返回y/x的反正切值.返回值表示相對直角三角形對角的角,其中x是臨邊邊長,而y是對邊邊長。Math。atan2(y,x)x/y分別指定點的x坐標和y坐標ceil返回指定數(shù)字或表達式的上限值.數(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可以供應e的值.floor返回參數(shù)x中指定的數(shù)字或表達式的下限值。下限值是小于等于指定數(shù)字或表達式的最接近的整數(shù).Math。floor(x)表達式:Math.floor(12。5)將返回值:12log返回參數(shù)x的自然對數(shù).Math。log(x)x〉0max返回兩個數(shù)中最大者Mat(yī)h.max(x,y)

min返回兩個數(shù)中最小者Math.min(x,y)

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

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

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

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

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

trace("Leftispressed");

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

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

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

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

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

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

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

最新文檔

評論

0/150

提交評論