自行製作新天下 Flash 遊戲方法

以下節錄 eiffel 兄的tutorial. 我以類似方法成功製作了部份 Game.

(本人製作之前並沒有閱讀eiffel 兄的tutorial, 不過因為本人用過 flash decompiler 及懂寫 AS, 所以之前用了類似方法亦已成功)

原理:
1.把好玩的flash遊戲下載,
2.然後把swf文件轉成fla文件,
3.進行修改,
4.發佈.

軟件需求:
1.flash mx 2004或以上 (建議使用FLASH 8 版本)
2.SWFDECOMPILER (可在sothink http://www.sothink.com/product/flashdecompiler/download.htm 下載試用版, 或是在網上找綠色版本)
除了 swfdecompiler外, 還可使用 swf quicker 或 著名的ASV (現在網絡上已經有asv 5.01破解版, 可反譯部分有保護的文件)

詳細說明:
(初學者,最好找一些比較簡單,容量較小的遊戲來改造.)

1.下載SWF檔
可以使用SWFDECOMPILER內附的CATCHER協助.
或者使用flash viewer http://www.unhsolutions.net/Flash-Saving-Plugin/downloads.shtml 都是比較方便的.

2.如何把swf轉成FLA文件
這裡有一些視象教學. http://ws3.wsps.tyc.edu.tw/sb2/07tools/swfdecompiler2005/
其實安裝SWF-DECOMPILER後,在swf文件上按右鍵,選convert to fla便可以了.
在過程中,會問用什麼版本解譯,一般都選recommanded的一種.

3.測試轉好的FLA文件
轉好的fla文件,要先拿到flash8上嘗試發佈測試(按f12),如果發佈成功(沒有錯誤信息),遊戲正常,便可以進行下一步.
以我經驗,有8成以上的swf都是正常可以轉成fla無誤的.
但也有20%失敗,原因有兩個:
1.swf遊戲太舊,用了一些不支援的語句.此時需要自己除蟲,一般在出問題的地方上按一下f1便有說明檔了
2.swf被保護了:有大約百分之一的swf被發布人使用了aso(ActionScript Obfuscator)加了保護,防止別人反組譯.
        這些swf就很難修改了.暫時只有放棄.

4.開始修改FLA文件
a. 在遊戲開始的地方導入資料
在第一影格加以下的actionscript
  1. function nk_end(score, level, others) {
  2.     nk_now = new Date();
  3.     _root.sendLV.starttime = _root.nk_starttime;
  4.     _root.sendLV.playedtime = Math.round((getTimer() - _root.nk_starttimer) / 1000);
  5.     _root.sendLV.playertime = _root.nk_timediff + Math.round(nk_now.getTime() / 1000);
  6.     _root.sendLV.fscore = score;
  7.     _root.sendLV.level = level;
  8.     _root.sendLV.others = others + " - " + Math.floor(_root.sendLV.playedtime / 60) + "分" + _root.sendLV.playedtime % 60 + "秒";
  9.     _root.sendLV.action = "swfrecord";
  10.     _root.loadok = false;
  11.     _root.sendLV.sendAndLoad("plugins.php", _root.loadLV, "POST");
  12. }
  13. System.useCodepage = true;
  14. _root.sendLV = new LoadVars();
  15. _root.loadLV = new LoadVars();
  16. _root.loadLV.onLoad = function (success) {
  17.     if (success) {
  18.         if (this.disallow) {
  19.             getURL("plugins.php?p=nkflash");
  20.         }else{
  21.             _root.loadok = true;
  22.         }
  23.         nk_now = new Date();
  24.         _root.nk_starttime = this.servertime;
  25.         _root.nk_starttimer = getTimer();
  26.         _root.nk_timediff = this.servertime - Math.round(nk_now.getTime() / 1000);
  27.         _root.nk_rate = this.rate;
  28.         _root.nk_bonuslimit = this.bonuslimit;
  29.         _root.nk_toplist = this.toplist;
  30.         _root.nk_username = this.username;
  31.         _root.nk_creditunit = this.creditunit;
  32.         _root.nk_credittitle = this.credittitle;
  33.     }
  34.     else {
  35.         _root.nk_toplist = "<br><br><br><br><p align=\'center\'>請勿胡亂連接本遊戲!</p>";
  36.     }
  37. };
  38. _root.sendLV.lang = System.capabilities.language;
  39. _root.sendLV.others = "0分";
  40. _root.sendLV.p = "nkflash";
  41. _root.sendLV.game = "XXXXXXXXXXX";
  42. _root.sendLV.action = "swfstart";
  43. _root.loadok = false;
  44. _root.sendLV.sendAndLoad("plugins.php", _root.loadLV, "POST");
複製代碼
B. 確保正確讀得PHP信息才可開始遊戲.
在開始(或重新開始)的按鈕, 加入 一句判斷是否_root.loadok
例如:原本是
  1. ON (PRESS) { gotoAndPlay("GAMESTART"); }
複製代碼
就要改成
  1. ON (PRESS) { if (_root.loadok) gotoAndPlay("GAMESTART"); }
複製代碼
C.結束時傳迴游戲成績.
在GameOver時加以下AS碼, 用來傳送成績回網站的資料庫
  1. _root.nk_end(gamescore, gamelevel, gameothes);
複製代碼
以上gamescore, gamelevel, gameothes要自己修改
gamescore 為遊戲中記錄積分的變數
gamelevel 為遊戲中記錄等級的變數,如果無等級可設為0
gameothers 是附加在排行榜的內容,可為空字元
例: _root.nk_end(score,0,"");

要在何處加這句 _root.nk_end(XXXX) 是一個難點!
一般會先看主影片,哪一格是遊戲的迴圈,結束在哪裡.
也可以瞭解GAMEOVER的原因,從而判斷迴圈的結束點是何處.
例如:生命是0時遊戲便結束,可以找顯示生命文字的變數是什麼,再用找尋ctrl+F,找哪些地方與這個變數有關.

5.到論壇測試
加入上述程序後,應該開始去論壇測試.看遊戲能否正常記錄分數.
要先去前台管理,新增遊戲,類別寫成[未開放].
然後玩兩三局,看能否正常記錄得分.

6.美化遊戲

A. 加入排行榜.
先要判斷時間軸中哪一影格比較適合顯示排行榜.繼而修改.
一般會在畫面上加1個文字框,再在屬性中選擇動態文字,
在變數欄填上 _root.nk_toplist  
選[多行], [<>], 不選[Ab] 調整行距. 字體顏色和大小.
但要注意字型必須選用 ()系統預設字型.

B.遊戲結束時顯示獎金.
可以在GAMEOVER時,顯示遊戲得分的地方,
插入文字方塊(動態文字),並把變數設成_root.nk_money可顯示遊戲獲得的金錢.

C.對遊戲的不良地方進行修改.
(適合高手)

7.發佈遊戲
1.為遊戲做一幅縮圖,尺寸是 140 X 105
2.調整 遊戲種類,得分限制,獎金比率.
3.導出遊戲SQL碼,發佈遊戲
(發佈時,請提供演示,SQL碼,圖檔,SWF檔的連結)

JinTech Semiconductor Co., Ltd JinTech Semiconductor Co., Ltd - About Us JinTech Semiconductor Co., Ltd - Our Service JinTech Semiconductor Co., Ltd - Expected Quality System Certification JinTech Semiconductor Co., Ltd - Contact Us Our Partners – Sai Fung Electronics Ltd