AS入門教程第六課文本與字符綜合練習-打字游戲制作[原創(chuàng)][本文已收錄教程庫] - Fla...
打字游戲戲
制作 先看效果 :        現(xiàn)在開始制作: 新建一 flash 文檔。 1. 新建一個影片剪輯元件,命名為“爆炸”。這需要一個爆炸的效果,你可以找一個爆炸圖片,也可以畫一個,我這個是用 PS 做的。進入元件編輯窗口,將爆炸圖片拖入,打散,居中放好。在第 5 幀插入關鍵幀。回到第一幀將圖片縮到 5 象素。然后建立形狀補間。打開庫面板,在爆炸元件上,點右鍵,點擊“連接”,為該元件輸入標識符“ bz”. 導入一個爆炸聲的音樂文件,在庫中音樂文件上點右鍵 - 屬性。取掉“使用導入品質”上的鉤。壓縮選擇 mp3. 在庫中右擊該音樂元件,點連接,為該元件輸入標識符“ pzs”. 回到爆炸元件編輯窗口,新建一層,在第 3 幀插入關鍵幀(這里是要導入爆炸聲,在第幾幀插入根據(jù)聲音的長短來定,如果聲音長那么就在第 1 幀就導入。)點右鍵,打開幀動作面板,輸入: var bd:Sound = new Sound();bd.attachSound("pds"); bd.start(); 第一句聲音了一個聲音對;第二句將庫中的爆炸聲音導入。第三句聲音開始播放。 在第 5 幀插入關鍵幀,在幀動作面板中輸入: this.removeMovieClip(this); 將爆炸元件移除。 圖:我用 PS 做的爆炸效果:( png ) 2. 再建一個影片剪輯元件,取名為“大炮 ”. 同樣你可以找一張大炮的圖片,也可以自已畫一個,我這個是自已畫的。注意將圖形放到中心點(十字)稍上方,即十字點在大炮的后半部位。 圖:我畫的大炮,不太好哈。注意十字的位置,大炮將以這一點作為旋轉的基點。 3. 新建 7 個按鈕,標簽分別為:“設置”,“重玩”,“字母”,“中文”,“慢速”,“中速”,“快速”。 4. 可以選一個背景 畫片,同樣可以找一個風景 圖(應有天空和地面),也可以畫一個,我畫了一個,又找了一張風景照片 ,結果還是認為風景照片好看些。當然你也可以不要背景圖片。 5. 演員準備齊了,現(xiàn)在開始布置舞臺。 回到主場景。第一層“背景”在第 2 幀插入關鍵幀,將“設置”,“重玩”按鈕從庫中拖入,放到左上部。打開屬性面板,分別將兩個按鈕命名為:“ sz_btn”,”cw_btn”. 在左邊稍下邊一點入一靜態(tài)文本,內容為“命中率”,在它的下邊放一動態(tài)文本,在屬性面板中命名為“ mzl_txt”; 在它的下面放一靜態(tài)文本,內容為“得分”,在它的下面,放一動態(tài)文本,在屬性面板中命名為“ df_txt”. 在右半部畫一矩形,然后在這個矩形上放一個靜態(tài)文本,內容為“當前設置”。然后放兩個動態(tài)文本,內容分別為:“字母”,“中速”。打開屬性面板,將兩個動態(tài)文本分別命名為:“ yysz_txt”,”sdsz_txt”. 將“字母”“中文”,“慢速”,“中速”,“快速”按鈕拖入,放到矩形的右半部。在屬性面板中分別命名為:“ zm_btn”,”zw_btn”,”ms_btn”,”zs_btn”,”ks_btn”. 如下圖: 在第 3 幀插入幀。 新建一層:在第 2 幀插入關鍵幀,將風景圖片拖入,調整大小,蓋住右邊的矩型鄣分: 將“大炮”元件從庫中拖入,放到右邊風景圖的下方中間。在屬性面板中命名為: ”dp_mc”. 6 .好了,布置好了?,F(xiàn)在來寫代碼。新建一層,命名為“ action”, 打開幀動作面板。 首選準備好文字,將出現(xiàn)的文字有字母和中文兩種,我們建兩個字符串來存放文字。字母比較簡單只有 26 個,所以第一句: var zm:String = “abcdefghijklmnopqrstuvwxyz”;第二句放中文,我找了一篇散文,將它存在字符串中 , 在散后最后加上 0~9, 這樣也可以讓用練習一下數(shù)字鍵。 var zw:String = "這幾天心里頗不寧靜。 …….”; zw+="0123456789";聲明幾變量,后面有用: var zs=0; // 下落文字的總數(shù) var df=0; // 擊中文字的數(shù)量 var lg = 1;// 語言,用于后面由用戶選擇練習字母還是練習中文。 var sd = 500;// 速度,用于設置文字出現(xiàn)的速度。 var wbformat:TextFormat=new TextFormat();// 創(chuàng)建一個文本格式 ,用于設置下落的文本 wbformat.bold=true; wbformat.size=22; 在第二幀插入關鍵幀:這一幀將實現(xiàn)文字下落,擊中和得分計數(shù)生等功能。 stop(); // 首先創(chuàng)建一個輸入文本用來接受用戶輸入文字: this.createTextField("sr_txt",31,350,350,30,20); sr_txt.type="input"; sr_txt.border=true; sr_txt.text=" 開始 "; //創(chuàng)建文本位置坐標要根據(jù)實際的位置來確定,使文本出現(xiàn)在大炮的下方。 下面用一個函數(shù)來實現(xiàn)出現(xiàn)字母的功能: var i=0; function cwb(wbl){// 注意這里聲明的函數(shù)帶了一個參數(shù) wbl ,這個參數(shù)用于文本是字母還是中文。 if(i<10){ // 這一句就讓屏幕上出現(xiàn)的文字只有 10 個。 var wbx = 150+random(370); // 產(chǎn)生一個 150 到 520 的隨機數(shù),用于設置文字的 x 屬性。 createTextField("wb_txt"+i,i,200,20,30,30); wb = eval("wb_txt"+i); var zmwz = random(wbl.length);// 產(chǎn)生一個從 0~ 文本字符串(第 1 幀創(chuàng)建那兩個)的長度之間的隨機數(shù),用于從字符串中隨機抽取字符。 wb.text = wbl.charAt(zmwz);// 設置文本的內容為字符串中的隨機字符 wb._x=wbx; wb.setTextFormat(wbformat);// 將第 1 幀創(chuàng)建的文本格式應用于該文本。 zs++;// 文本出現(xiàn)后,文字總數(shù)加 1 }else { i=0; } i++; } // 下面通過 onEnterFrame 事件,讓出現(xiàn)的文本不斷往下落: onEnterFrame = function() { for (k=0;k<10;k++){ wb= eval("wb_txt"+k); wb._y += 2; } }; // 接下來就是啟動游戲了,我們將啟動按鈕設在輸入文本的 onSetFocus 事件上,也就是說,當我們一點擊“開始”(輸入文本獲得焦點),游戲啟動。 var szm;// 這變量用來調用上面的出現(xiàn)字的函數(shù)。 sr_txt.onSetFocus = function(){ var jsid = setTimeout(js,60000);// 首先設置一個時間限制,就是說 60000 毫秒( 1 分鐘)調用函數(shù) js ,這個函數(shù)將停止游戲并統(tǒng)計得分。 if(lg==1){// 如果變量 lg 等于 1 szm = setInterval(cwb,sd,zm); // 那么每隔變量 sd 那么長的時間,調用一次出文字的函數(shù) cwb ,并且使用字母( zm )字符串) }else {// 否則 szm = setInterval(cwb,sd,zw);//那么每隔變量 sd 那么長的時間,調用一次出文字的函數(shù) cwb ,并且使用中文( zw )字符串 ). 所以我們只雖改變變量 lg 的值,就可以選擇出字母還是出中文了。 } sr_txt.text="";// 將輸入文本框清空,準備輸入。 } function js(){// 這是聲明了一個用于結束游戲的函數(shù)。 clearInterval(szm);// 清除 setInterval 的調用,文字不再出現(xiàn)。 mzl_txt.text = int((df/zs)*100)+"%";// 計算命中率,并顯示。 } // 下面通過輸入文本的 onChanged 事件,實現(xiàn)炮轟文字的效果。 sr_txt.onChanged = function(){// 當輸入文本內容發(fā)生變化時,即我們每輸入一個文字時 for(var j=0;j<10;j++){ cxdwb =eval("wb_txt"+j);if(sr_txt.text == cxdwb.text){// 如果輸入的文字和出現(xiàn)的文字之一一樣。 attachMovie("bz","bz_mc",21);//那么從庫中加載爆炸元件,這里的深度我用了 21, 是為了避免與出現(xiàn)的文字文本沖突,當然 11 也就行了,因為文字文本只有 10 個。 bz_mc._x=cxdwb._x; bz_mc._y=cxdwb._y+10;//兩句設置爆炸元的位置和文字文本的位置一樣,使其在文字處爆炸。 dx = cxdwb._x - dp_mc._x; dy = cxdwb._y - dp_mc._y; dz = Math.atan2(dy,dx)*180/Math.PI; dp_mc._rotation = dz+90;//上面是通過三角函數(shù)使大炮的方向轉為文字文本的方向。 cxdwb.removeTextField();//爆炸后將文字文本刪除,即炸掉了。 df++;//擊中后得分加 1 df_txt.text=df;//顯示得分 } } sr_txt.text="";// 清空輸入文本,準備下一次輸入。 } // 游戲的功能就完成了,現(xiàn)在應提供一個重玩按鈕,讓用戶可以重新開始游戲。 cw_btn.onRelease= function(){// 當重玩按鈕被點擊時 if(lg==1){ szm = setInterval(cwb,sd,zm); }else { szm = setInterval(cwb,sd,zw);} sr_txt.text=""; setTimeout(js,60000); df=0; zs=0; mzl_txt.text=""; } // 下面是設置按鈕,進入設置頁面。 sz_btn.onRelease =function(){ gotoAndStop(3); } 在第 3 幀插入關鍵幀,將在這一幀設置文字語言,速度等。 進入設置頁面后,首先停止游戲: clearInterval(szm); zs=0; df=0; // 下面是幾個設置按鈕上的代碼: zm_btn.onRelease = function(){ lg=1;// 讓孌量 lg 等于 1 ,這樣文字將會是字母 yysz_txt.text=" 字母 "; } zw_btn.onRelease = function(){ lg=2;// 讓孌量 lg 不等于 1 ,這樣文字將會是中文 yysz_txt.text=" 中文 "; } ms_btn.onRelease= function(){ sd = 1000;// 設置 sd 為 1000 毫秒,即每 1000 毫秒出一個文字,下同 sdsz_txt.text=" 慢速 "; } zs_btn.onRelease=function(){ sd = 500; sdsz_txt.text=" 中速 "; } ks_btn.onRelease=function(){ sd =200; sdsz_txt.text=" 快速 "; } qd_btn.onRelease=function(){// 這是確定按鈕上的代碼,點擊確定按鈕后,退出設置窗口,返回游戲窗口,繼續(xù)游戲。 gotoAndStop(2); } 好,完工,祝你成功! [
本帖最后由 sanbos 于 2008 -11-19 09:48 編輯 ]
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請
點擊舉報 。