大伙儿晚上今天瞎折腾了一天,主要是想回忆一下童年,顺便看看能不能自己动手实现个类似《双截龙》那样的小游戏。说干就干,我这人就这样,想起一出是一出。
最初的构想和准备
我琢磨着,《双截龙》这游戏,核心不就是俩兄弟(或者一个人)在横版卷轴的场景里,一路打打杀杀,揍翻各种小喽啰,救人嘛第一步,我得有个能动的主角,还得有几个挨打的敌人。
我没打算用啥复杂的游戏引擎,就想从最基础的开始,找了点以前鼓捣过的图形库,先画了个小火柴人代表咱们的主角比利。然后,就是让这个小火柴人能响应键盘操作,左右移动,再加个跳跃。这一步倒腾了大概一个钟头,主要是调整那个跳起来的高度和下落的速度,让它看起来不那么僵硬。
核心战斗的尝试
能动了之后,就得能打人。我记得《双截龙》里最基本的就是拳击和脚踢。我就给主角加了这两个动作。按下攻击键,火柴人就伸个胳膊或者腿。关键是得有打击感,这个我目前还没细做,就是简单地在攻击动作播放的时候,检测一下前方有没有敌人。
说到敌人,我也画了几个更简单的火柴人,先让它们傻乎乎地站在那儿。然后,我开始琢磨怎么实现那些经典的招式:
- 过肩摔:这个我印象特别深,靠近敌人按拳头就能把人摔到身后去。我试着写了个逻辑,判断主角和敌人的距离,如果足够近,并且按了拳头键,就触发一个“摔”的动作,把敌人的位置瞬间移动到主角身后,再播放一个敌人倒地的样子。这个调试起来费了点劲,主要是距离判定和动作切换。
- 膝盖顶脸:靠近敌人按脚,能把敌人脑袋按到膝盖上猛K。这个跟过肩摔类似,也是距离判定,然后播放一套特定动画。我简化了一下,就是敌人会进入一个短暂的被控制状态。
- 旋风腿:跳起来狂按脚那个。这个我设定成跳跃到最高点附近按脚,主角会播放一个旋转踢腿的动作,攻击范围也比普通踢腿大一点。这个招式当年可是清场神技!
我还特意去网上搜了搜《双截龙》的出招表,发现有些细节我记不太清了。比如AB键一起按是跳跃,这个操作模式在当时还挺新颖的。我就把跳跃也改成了A+B(假设我有A、B两个攻击键)。
敌人AI和场景滚动
光让敌人站着挨打肯定不行。我就给敌人加了点简单的AI,比如看到主角靠近一定范围,就会傻乎乎地冲过来打主角。被打几下之后,会有一个硬直,或者后退一下。目前还很初级,就是个木桩子PLUS版本。
横版卷轴也是《双截龙》的特色。我实现了一个简单的镜头跟随,主角走到屏幕中间偏右的位置,整个背景就开始往左边滚动,模拟前进的效果。这个主要是坐标计算,得保证背景和人物的相对速度一致,不然就感觉很怪。
初步成果和遇到的问题
折腾了一天,现在我的“火柴人双截龙”大概是这么个样子:主角能在屏幕上跑跑跳跳,能出拳出脚,也能磕磕绊绊地放出旋风腿和过肩摔。敌人会傻傻地冲过来,被打到会晃一下。背景也能跟着主角移动了。
遇到的主要问题嘛
- 打击感:目前基本没有。就是简单的动作播放和碰撞检测,没有音效,没有震动,没有受击反馈,感觉软绵绵的。
- 动作流畅度:火柴人的动作还是有点生硬,特别是招式之间的衔接。这个得慢慢调。
- 判定精确度:过肩摔和膝顶的触发距离、攻击范围的判定,有时候还是不太准,得多测试调整。
- 敌人AI:太弱智了,完全没有挑战性。
不过嘛毕竟是自己瞎鼓捣,能把童年经典用自己的方式“重现”个大概轮廓,还是挺开心的。这感觉,就像小时候第一次在游戏厅打通《双截龙》一样,虽然粗糙,但乐趣不减。接下来有空的话,我再慢慢完善一下打击感和敌人AI,看看能不能做得更像样点。今天就先到这儿,眼睛都快看花了。