14490| 50
|
[项目分享] 志童道合 | 12.14 PVZ更新!!(增加贴图动画+合理密植规则) |
7 创造力 | 回复本帖可获得 1 创造力奖励! 每人限 1 次 |
本帖最后由 罗卡 于 2022-12-14 17:08 编辑 【项目介绍】前言: 从小就玩过很多优秀的塔防游戏,有2D平面的国王战争系列,也有3D的银河破裂者等等,他们都有各自的优点。 但随着我接触的类型越来越多,我越发感受到PVZ这个游戏的精良:堪称极品的背景音乐,细腻可爱的贴图动画,让人又爱又恨的戴夫,以及让人眼前一亮的各种模式...... 从只能接触dao ban,到steam代理全成就,再到各种改版。这个游戏对我而言的意义早已超脱出游戏本身,让我沉沦其中。所以,我想要用自己的方式还原这款游戏。 这次疫情之前,我在选修课期间了解到mind+这个软件。虽然因为疫情只学习了很少有关掌控板的知识,但通过自己的摸索,更改,还是完成了一些自己的作品。RPG和横板跑酷(主要是硬件太贵了,只能选择用实时模式)尽管我没有学过编程,也不知道模块该如何使用,该如何实现这个想法。但我觉得,只要肯摸索,肯坚持,开放脑筋,总会有解决的方法。:) 由于之前尝试过一个横板跑酷和一个RPG游戏,所以对一些模块有一定的了解,不至于毫无头绪。所以主要思路为:贴图-模块搭建-音频 我首先解决的是关于贴图模型和音频的问题:我在B站上找到了原版PVZ的PAK解码方式,但是人物模型是这样的..... 这也太碎了好吧... 还好,部分音效和背景还是可以用的,但是背景音乐和人物模型得我自己解决 我通过网易云识别原版音乐,再通过网站下载,应用内剪辑,得到了全部的音频资源(有的音效居然没有原版,得从魔改的音乐里截取...) (0v0阳光模型当然是音乐盒啦) 模型真的很折磨,我得从游戏里截取然后抠图,还得对比背景大小和重心部分......肝啊 (之前没有这个活动时拼图的素材没了....这是最近加动画时的部分贴图...) 解决了贴图和音频的问题,接下来就是模块了。 其实全做完之后回头看来,使用我能理解的mind+的功能实现植物的种植,死亡,攻击是很困难的(克隆指令好难啊...) 我一开始想到的是使用多个角色,通过以此隐身+显形的方式来实现种植,但我很快发现这是不现实的。因为这会使程序的体积急剧增加,很大程度上浪费系统资源,降低运行速度,得不偿失。 于是,我觉得将植物的种植分为三部分(不包括各种植物特殊的功能eg.豌豆发射):植物卡片+鼠标植物+本体复制。 而这很快又使我遇到了新的问题:我没有意识到角色太多且没有命名和顺序,这使得我角色的辨识工作极为困难。而且变量和广播的名字我也是用的123,一开始还能记住,但越往后越举步维艰。(广播居然不能像变量一样改名,气死我了)被逼无奈之下,我只能放弃旧稿,重新做一个新的。(1版我开始做的时候才10月份,实在找不到被删除的版本了,没想到以后会用上o((⊙﹏⊙))o.) 之后就是漫长的调试过程啦:时间很紧张,实在不想写旧bug配图片了,就只有文体叙述了,不过我可以描述代码问题,嘿嘿。 1.植物卡片: 1号是正常的状态,如果鼠标放上去,就会变黑(更改了很多个版本,发现上下不做遮挡是最好看的...) 这是模块:他的内容很简单,一开始我只让他负责自身检测鼠标位置和广播鼠标植物。但是出现了问题,由于没有冷却时间,经常出现点一下扣好几百阳光,模型疯狂闪烁,然后种一堆植物(模型都堆叠在一起,我不知道是卡片的问题,单纯的以为是变量出bug了....)之后在鼠标点击后加入了3s等待,就解决啦。之后在加入关卡系统后,就微调了一下。 2.鼠标植物 (这是最近更新过的模块,之前一直没想好怎么不让植物满地随便种,这个在之后再说) 当卡片被点击,广播对应植物的名称,于是鼠标植物开始运行:进行判断,如果阳光数不足,则播放对应音效,并回退卡片开始冷却,避免误触。如果阳光足够,则会显形并跟随鼠标,直到再次左键种下后隐藏,广播给本体植物。 鼠标植物的好处在于不需要考虑隐身后的位置,玩家只能一次种一个植物,因此只需让他隐身即可,相比与反复克隆,能省下大量内存。 想了想,这居然是唯一一个没出现BUG的角色... 3.本体植物:这里各角色间有一定区别 豌豆射手 (左边那一堆是角色动画,虽然很蠢,但我没想到更好的实现动画的方式)这是当时最为艰难的部分之一,你永远无法想象他为啥这么运行,哪里出了问题,出了什么问题。(克隆体重叠召唤卡片无冷却,疯狂扣阳光本体扣除阳光系统没有冷却,僵尸吃1路的植物,4路的死了广播植物死亡无法单指克隆对象,导致判断失误。植物死了,但判定还在,继续攻击.....调试死亡生成判定线时没有时差,导致已经死亡的植物判定线的删除和生成先后开始,种一个植物,其他的就哑火。生成判定线的模块循环指令乱套了种在地图外当时没解决的问题,无法限制植物种植的条件,现以解决等等等等克隆真的好复杂啊)克隆的难度在于我没有理解他其实是相当与一个与原角色完全相同的生成程序,我以为他只会执行“当作为克隆体启动时”下的程序,实际上这只是一条方便克隆程序进行的开始条件。所以当我觉得克隆体决对不会运行这个程序时,实际上他一直在运行, 大部分bug都是这么来的。然后我又单开了个项目,研究了一下克隆体的运行机制,才知道这血的教训。 言归正传,经过一个星期的调试,终于绞尽脑汁实现了攻击和死亡的功能。相比与其他被动植物,豌豆射手还需要一个判断是否发射豌豆的问题,我刚开始的想法是在模型里加一条线,判断是否碰到僵尸来决定是否发射豌豆。但是在加入僵尸吃的功能后,僵尸就能隔空把豌豆射手吃了...他俩“接触”判定条件没办法用mind+里的模块分开...攻击和吃的指令同时开始所以我放弃了在模型上解决,转而通过克隆一条极细的判断线来解决。(后来又出现隔行判定的问题服了,画图里的直线工具没有校直,我在外边画的线导入进来的) 可是他们俩没法同生共死,不是种了植物没判断线,就是植物没了,判断还在。要不就是一个植物死了,吓得其他人直接放弃攻击。都是没有时间间隔导致的,能想到解决方法太不容易了,我当时连问题是什么都不知道,人都麻了。 又研究了3天,我才想到解决方法:种植-生成,死亡-删除-重新生成。豌豆生成时报告自身位置,然后广播判断线生成。死亡后删除判断线,然后重新生成指令。为了防止他们同时生成,我在“豌豆die”的广播接收下加入了个极短的随机数等待,来使同一个变量”位置“能够完成所以克隆体的指令。实现同一个指令不同的运行顺序。 然后召唤豌豆子弹,运动,接触隐藏和扣血的指令就很简单了(谁帮我想想咋能把那么长的判断条件缩短一下呗,广播用不了,有bug。谢谢!0v0) 向日葵 向日葵之前的版本阳光是直接在模型中体现的左右各两个贴图,然后生成的时候随机数决定这两个动画。当时在我加入动画之后这样的想法就不切实际了,于是我加了个小阳光的克隆体让向日葵冷却后广播克隆体的生成。然后通过鼠标来拾取。 不得不说,运动里“xs内滑动”是一个很丝滑的运动指令,要是能加上xs内运动y步就更好了 坚果肝不动了,没做他的动画 我没做扣血的功能,而是用的三段无敌时长。我觉得这样在面对多僵尸的时候效果更好~ 有了之前的经验,这个角色就很简单啦。 4.僵尸系统有点多放不下了 当阳光数达到100后,播放音频,开始生成僵尸。僵尸的生成很好理解,循环随机数判定5行中的一行,向前走就行了。遇到植物就吃,反复前后移动来达到静止的目的,最后在地图边缘加条判定线,在加上扣血防具的掉落。当当.僵尸做好了。(有防具的僵尸就没做动画) 5.舞台指令系统 后院:通过不同僵尸的生成系统完成前几关的设计,3关开始就无尽模式了。 关卡结束后的加载界面,偷了个懒,没做按钮交互。切换时间正好是一般人反应后点按钮的时间,嘿嘿 开始菜单, 每个按钮都是可交互的哦,还有闪烁动画。设置界面是为了防止关卡太难。 每次开启游戏没法直接启动,就加了个提示界面(大家帮我想想解决方案呗,谢谢0v0) 6.系统功能&规则 判定点的制作 终于,终于,我想到了解决方案。我按照地图的格子,先规划出图1中的方格子(为什么不能画水平直线!!!!!!)之后通过这些绿点与鼠标的距离,只要满足距离条件,植物才能种下去。(代码很简单,可我想了好长好长时间!) 这里也出现了一点小小的问题,距离的判定是鼠标与角色重心的距离,和接触指令不同。所以我用的是碰到,放弃了“距离小于等于”。 这个手是我用上边原版的碎片拼起来的....我拼的时候才发现他是4根手指 种子槽没办法显示数字,阳光有点出戏...(求助) 自然阳光的生成和拾取我取巧了,只做了一个,过时间消失后才生成新的(看起来像是克隆,实际上只有一个本来来回隐藏+运动) 进度条是三部分,通过运动的进度条在规定时间内走完实现关卡的切换。 他们三个的图层是不同的,进度条2很好的盖住了运动条,使全程看起来很丝滑。 最后劈里啪啦一顿肝+调试,就得现如今的结果 演示视频地址: https://www.bilibili.com/video/BV1n14y1N7Nv?share_source=copy_web 【总结】:由于我完全没有基础,导致这个程序的上限并不高。我对于一些游戏内容所设计的模块普遍具有很强的局限性,以至于再向下拓展内容困难重重,比如判定是否接触到僵尸和生成僵尸的代码过于繁琐。再进一步也只能完善完善贴图动画,修改修改游戏bug,丰富音乐和互动内容,加几个极为有限的植物。没办法再弄更多东西了。不过我并不觉得遗憾,我已经尽我所能的将自己的热爱投入到这个陪伴我至今的游戏之中,并这个过程中学到了很多东西。我想这就足够了。 真正去体验做游戏的过程后,我才明白原来游戏制作并没有我想象中那么简单。我也很佩服pvz的作者能用80多MB的内存完成这么多的游戏内容(我只写这点东西就已经16MB了) 最后,希望大家能下游戏玩一玩,给我提提建议,感谢大家的支持。:)glhf! 提取码:BQBH |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed