標題:
自行製作新天下 Flash 遊戲方法
[打印本頁]
作者:
createch
時間:
2009-9-20 05:03
標題:
自行製作新天下 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
function nk_end(score, level, others) {
nk_now = new Date();
_root.sendLV.starttime = _root.nk_starttime;
_root.sendLV.playedtime = Math.round((getTimer() - _root.nk_starttimer) / 1000);
_root.sendLV.playertime = _root.nk_timediff + Math.round(nk_now.getTime() / 1000);
_root.sendLV.fscore = score;
_root.sendLV.level = level;
_root.sendLV.others = others + " - " + Math.floor(_root.sendLV.playedtime / 60) + "分" + _root.sendLV.playedtime % 60 + "秒";
_root.sendLV.action = "swfrecord";
_root.loadok = false;
_root.sendLV.sendAndLoad("plugins.php", _root.loadLV, "POST");
}
System.useCodepage = true;
_root.sendLV = new LoadVars();
_root.loadLV = new LoadVars();
_root.loadLV.onLoad = function (success) {
if (success) {
if (this.disallow) {
getURL("plugins.php?p=nkflash");
}else{
_root.loadok = true;
}
nk_now = new Date();
_root.nk_starttime = this.servertime;
_root.nk_starttimer = getTimer();
_root.nk_timediff = this.servertime - Math.round(nk_now.getTime() / 1000);
_root.nk_rate = this.rate;
_root.nk_bonuslimit = this.bonuslimit;
_root.nk_toplist = this.toplist;
_root.nk_username = this.username;
_root.nk_creditunit = this.creditunit;
_root.nk_credittitle = this.credittitle;
}
else {
_root.nk_toplist = "<br><br><br><br><p align=\'center\'>請勿胡亂連接本遊戲!</p>";
}
};
_root.sendLV.lang = System.capabilities.language;
_root.sendLV.others = "0分";
_root.sendLV.p = "nkflash";
_root.sendLV.game = "XXXXXXXXXXX";
_root.sendLV.action = "swfstart";
_root.loadok = false;
_root.sendLV.sendAndLoad("plugins.php", _root.loadLV, "POST");
複製代碼
B. 確保正確讀得PHP信息才可開始遊戲.
在開始(或重新開始)的按鈕, 加入 一句判斷是否_root.loadok
例如:原本是
ON (PRESS) { gotoAndPlay("GAMESTART"); }
複製代碼
就要改成
ON (PRESS) { if (_root.loadok) gotoAndPlay("GAMESTART"); }
複製代碼
C.結束時傳迴游戲成績.
在GameOver時加以下AS碼, 用來傳送成績回網站的資料庫
_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檔的連結)
歡迎光臨 HFL (http://happyfunnyland.com/)
Powered by Discuz! 7.2