狗狗
加菲's
级别: 管理员


精华: 10
发帖: 4860
威望: 10315 点
金钱: 10295 静电币
支持度: 20130 点
在线时间:1420(小时)
注册时间:2001-11-20
最后登录:2024-12-21

 [Flash]魂斗罗

Posted: 2004-09-04 22:47 | [楼 主]
狗狗
加菲's
级别: 管理员


精华: 10
发帖: 4860
威望: 10315 点
金钱: 10295 静电币
支持度: 20130 点
在线时间:1420(小时)
注册时间:2001-11-20
最后登录:2024-12-21

 

《魂斗罗flash版/魂斗罗梦工厂》制作简介

内容介绍
"魂斗罗"是日本游戏公司KONAMI在上个世纪八十年代末推出的一款风靡全球的枪战游戏。一开始只是出现在家用机上,而在后来的几十年里,这个游戏不断的被移植到街机,手掌机,超任,PC等平台上,并衍生出的很多新的后续版本。其影响力之广,我们二三十岁的这代人都是见证人。直到今天,还听说KONAMI借助PS2平台,将要推出最新版的三维 “魂斗罗”。
用flash做的这个游戏,以最早的魂斗罗I代为原型,再现了其中的第一关和最后一关,并有所加工。力求既能通过熟悉的画面和音乐沟起大家童年的回忆,又要让战斗的场面和视听效果尽可能更好一点。
从制作技术上说,我也想通过这个游戏抛砖引玉的说明用flash制作大型枪战游戏的可能性。

作品制作技巧
这方面可以谈的很多,下面概括的说两点:
1. 关于游戏的操纵部分。主要用到的是检测按键(Key.isDown(keycode)),flash mx自带的范例中有一个源文件Movement-keys.fla说明的就是这个,大家可以研究一下。当然,魂斗罗的控制要复杂的多。首先要把游戏主角(Player)所有的动作做到一个MC里面,并贴上相应的桢标签,在上一级的MC里面根据不同的按键比如走路,开枪(各个方向),跳,死亡等等来调用相应的桢,子弹要做成单独的MC以便于和敌人进行碰撞检测。另外,为实现游戏场景的x方向滚动,还要用按键控制游戏背景的_x属性。为了能让Player(还有敌兵)能在第一关的背景中跳上跳下,在每一级台阶上都要有一条不可见的线形的MC,在Player跳起的下落过程中不断检测和它们有没有碰撞(hitTest()), 如果有就站到那级台阶上(用修改player._y实现),没有就一直下落直到死亡。
2. 根据player的位置激活敌人的枪炮,以及敌人如何跟踪player。以炮为例,在炮的第一桢做一个不可见的MC在这个MC的onClipEvent(enterFrame){}中不断检测与parent._x(即炮的横坐标)和Player._x的差,当小于某个值时播放下一桢(即炮进入战斗状态)。再建一个不可见的MC让它存在于炮的战斗状态,在它的onClipEvent(enterFrame){}中用Math.atan()不断求出player、炮和水平线夹角差的反正切,这样就可以控制子弹的_rotation跟踪player了。当然,还要用int()稍微模糊化一点(我作品中的难度系数就是这个模糊量),否则谁也躲不过子弹。 与此同时,还要检测player子弹和炮的碰撞,到一定值就让炮进入死亡状态并给player加分。其它敌人枪炮的制作与此类同,换汤不换药。

感想
制作游戏是动画和编程的综合,在这个作品中我比较注重编程。既然是编程,一些软件学的原理都是适用的,比如模块化的思想,程序的可移植性、可读性、容错性等等都是很重要的。事实上,我认为将游戏的设置部分和游戏内容分离是将来的发展方向,把它们做成两个独立的exe和swf,用loadMovie传递参数并连接它们(就象游戏机插游戏卡)。这种方法有利于flash游戏的商业运作。

——写于2002年初,原载《中国FLASH百部经典》


PS:“魂斗罗梦工厂”编辑器/播放器是在“魂斗罗flash版”的基础上升级的,并没有费太大的事。这要归功于当时程序的模块化比较好啊:)
Posted: 2004-09-04 22:51 | 1 楼
帖子浏览记录 版块浏览记录
狗狗静电BBS - wwW.DoGGiEhoMe.CoM » 哇啦哇啦 Discuss & Talk aloud

沪ICP备05008186号
Powered by PHPWind Styled by MagiColor