本文是说明 新天下游戏插件 中的游戏制件方法
https://discuz.dismall.com/thread-369782-1-1.html
原理:
1.把好玩的flash游戏下载,
2.然后把swf文件转成fla文件,
3.进行修改,
4.发布.
软件需求:
1.SWFDECOMPILER (可在sothinkhttp://www.sothink.com/product/flashdecompiler/download.htm下载试用版, 或是在网上找绿色版本)
2.flash mx 2004或以上 (建议使用FLASH 8 版本)
详细说明:
(初学者,最好找一些比较简单,容量较小的游戏来改造.)
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 end(score,level,bonus,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.nk_playedtime = Math.floor(_root.sendLV.playedtime/60)+'分'+(_root.sendLV.playedtime % 60)+'秒'; // 可以用playedtime来显示游戏时间
- _root.sendLV.fscore = score;
- _root.sendLV.level = level;
- _root.sendLV.bonus = bonus;
- _root.sendLV.others = others;
- _root.sendLV.action = "swfrecord";
- _root.loadok = false;
- _root.sendLV.sendAndLoad("plugins.php", _root.loadLV, "POST");
- _root.nk_money = Math.round( score /_root.nk_rate + bonus); // 用来显示所得金钱
- if (_root.nk_money > _root.nk_bonuslimit and _root.nk_bonuslimit>0)
- _root.nk_money = _root.nk_bonuslimit;
- }
- System.useCodepage = true;
- _root.sendLV = new LoadVars();
- _root.loadLV = new LoadVars();
- _root.loadLV.onLoad = function(success) {
- if (success) {
- 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_toplist = this.toplist; //排行榜使用的变数
- _root.nk_rate = this.rate;
- _root.nk_username = this.username; //人名使用的变数
- _root.nk_bonuslimit = this.bonuslimit;
- _root.loadok = true;
- }
- };
- _root.sendLV.p = "nkflash";
- _root.sendLV.game = "游戏id"; // 请修改game_id
- _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.end(gamescore, gamelevel, gamebonus, gameothes);
复制代码
以上gamescore, gamelevel, gamebonus, gameothes要自己修改
gamescore 为游戏中记录积分的变数
gamelevel 为游戏中记录等级的变数,如果无等级可设为0
gamebonus 游戏中记录额外奖金的变数,如果无额外奖金可设为0
gameothers 是附加在排行榜的内容,可为空字元
例: _root.end(score,0,0,"");
要在何处加这句 _root.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档的连结)
==============================================================
对以上有问题,欢迎提出讨论
[ 本帖最后由 Eiffel 于 2006-8-26 18:11 编辑 ] |