我又回来了。
经过一段时间的学习,总算刷完了红激的GML系列,真TM长啊。。。。还有淘金者,还是有不明白的地方,当然也和红激每期视频都是直播录播形式有关,现场改bug。。。之后跟了heartbeast的platformer教程。
参加了两次LD,嗯,都是赶时间做的。
第一次是LD39,那时候刚接触GMS,没有真正做过什么东西。直到deadline才提交,做的非常粗糙,gameplay也就一个听声辨位挖宝箱,玩个新鲜之后就不会再玩了。做的时候还幻想加入很多探险道具什么的来扩展,但完全没有时间。gameplay本身也比较单薄,做得又慢,于是在所有素材都是现成的情况下做了三天勉强做完。还是很开心的,但是也看到了差距。
第二次是LD40,这一次过程也不是很顺利,但是速度却快了一倍,质量也高了,不过创新就没那么明显了。前一天半想了半天敲定了一个方案,动手做出原型之后发现不好玩,至少在原型阶段不好玩。于是开始思考第二个方案,这时候已经一天半过去了。火急火燎做原型,然后按着这个路子走了下去,做sprite、动画、背景,一气呵成。在即将deadline的时候,发现没写instruction,于是赶紧用游戏截图做了个说明页面。总算提交了。对比上次,这次的游戏无论概念、完成度、细节质量都比上次高,而且除了音乐外所有素材都是原创,时间却比上次少用一半。超开心。看到评论有的说手感奇怪,有的说喜欢这个手感,还有一位给出了非常有价值的反馈,让我在提交之后进行了一下小修改,让整个游戏的思路更合理了。之后几天偶尔会去玩一下其他人的游戏,发现脑洞太大了,非常好玩,说明我还要再往盒子外面去跳。
然后说说别的,这么长的时间里,玩游戏的时间反而少了,我觉得这样不好,应该保持新鲜度,不能用“时间不够用”来压制自己玩游戏的心,于是每天都有纯粹玩游戏的时间。开心。
想做一些小游戏,做了几个没有做完的原型,正好赶上LD40开始了,就没顾上。之后会继续练习的。手机里积攒的一些想法应该多去琢磨。同时,因为玩了Home这个游戏,于是想也做一个横版解谜游戏,关于太空中的孤独旅行、关于对家人的思念、关于对过去生活的反思、关于时间旅行、关于极端情况下的“理性”和人性。基本是从剧情和氛围触发,思路还没定,不知道要不要加入战斗和外太空生存的元素,但是总体基调有些类似《沉默年代》。已经写出了故事,但是自己都觉得不满意,它的高度撑不起一个游戏。于是开始写第二个版本。如果自己觉得剧情可以了,再把First Playable做出来。
同时自己最近总是想起玩大航海时代4的时候,真的好喜欢这个游戏,于是又关联性地想起了太阁5。恰巧最近B站上看了忍者乱太郎电影版,于是,特别想做一个关于忍者的养成游戏,玩起来有点像太阁5的感觉,有很多事件内容和探索的内容。我可以学习各种忍法,要去执行各种命令,可以体验到日常生活的情景,有一些回忆或者谜团,可能还要做一些艰难的决定等等等等。最近回去玩骑砍也带给了我一些想法。
题外话,最近借来了黑魂3的盘,遇到了劝退哥,他很称职。嗯!
学习日志:刷红激GML系列和像素
视频中我选择性地进行了观看(太长了),有些之前已经了解了的东西就会看看红激有没有做一些例子或者告诉我们它的应用,对于不熟悉的则着重看了一遍。但是也就是过了一遍,一是有些东西还是在实践中反复学习比较有效,视频只是一个引导作用;而是GM8和GMS可能有所区别,以后会以f1为主。之前不了解的view、数据结构什么的有了初步的了解。 接下来会继续跟淘金者教程,这个教程中希望能学到复杂的AI、保存数据、地图编辑器制作。
像素画继续学习中,继续临摹头像、人物、带场景的人物,做了一些总结。推荐公众号:教你画像素画。
学习日志:吃豆人
- 吃豆人会一直移动,按键只改变方向,松手依然移动。这个有多种方法实现,教程里是在create事件里定义了 dx dy,这样每次按键会改变dxdy的值,pacman根据该值移动。(为什么要用keyboard_check而不用keyboard_check_pressed,因为如果用了,那需要转向时机很准确才能在路口转向)
- 吃豆人自动行走时碰到前方墙壁就停止。他把迷宫做成sprite并且使用精确碰撞,就不用一个个画阻挡obj了。碰墙停止的效果仍然是“预判断下一步如果碰到墙,那这一步就够把速度归零。”
- 吃豆人应该是按照路径移动,不能随意自由移动且能轻松转弯。视频里思路其实是用自由移动加上碰撞限制来做的,而不是真的让它按照路线移动。具体来说就是角色碰撞盒尺寸和迷宫通道宽度正好相等。
- 上面2这一点实现后,就会有两个问题:1在水平(竖直)通道里,按上下键(左右键)应该是没有响应的,而实际上假如我按了,那pacman就会(向左右/上下)转向然后停住,因为转向之后就没有路了;2 由于第一点的存在,我在十字路口需要按键时机非常精准才能让它转向,否则就会卡住。下面会解决这两个问题:在每次按方向键后,先检测是否会令它发生碰撞,如果会就不响应方向键,否则响应。
学习日志:雪山兄弟和坦克大战
雪人兄弟
- 跳跃判断稍复杂,原地跳时只有下落的时候可以控制方向,左右跳自带方向 。一样是通过下落状态、方向来做判断分情况讨论。
- 同样用了马里奥里的父对象墙来检测判断。
- 魂斗罗向上闯关的那种站到上边后视野向上移动,这个好像只能通过代码实现,即改变view_yview[0]。这个应该写在end step事件里,不过目前写在step里肉眼也看不出区别。
- End step事件。比如我要改变视野的位置,上边那种效果如果用step事件就会出现一些绘图有位置偏移。举例来说,把改变视野位置的代码写在obj_ctrl里,然后同一步里要处理三件事情:绘制圆、运行obj_ctrl代码、绘制圆心。圆和圆心都要绘制在房间坐标【10,,10】处。假如说写在step里,那么圆不变,圆心房间坐标仍然是【10,10】,但是视野先发生了变化,于是圆心在视野里的位置就变了,于是最后在屏幕上发生了位置变化。
- 变量可以赋值为资源名称,比如可以在代码里写: brk=spr_break30; sprite_index=brk 打砖块和顶砖块。
- instanceID的应用,instance_create可以返回ID值。 如果obj需要其图像随着条件变化,比如顶头顶上的砖块会令原来的砖块(obj_wall)消失而产生一个对应碎砖块(obj_break),砖块有很多种,每种对应一种碎砖块的形象。生成什么sprite则根据碰到的wall的brk变量来决定(在每种wall的create event里已经写了 brk=spr_break01…02…..等等等)
- 用image_xscale控制人物朝向(1,-1)
=====================================================================
坦克大战
- 几个指令可以同时下达,但只需要响应其中一个,可以用else 。 比如需要角色不是自由移动而是同时只能在上下左右四个方向中的一个移动? :
if keyboard_check(ord('A')) {dx=-1;face=3}
Else { if keyboard_check(ord('D')) {dx=1;face=1}}
- 画墙新方法用双层for循环画墙。
- 假设一个大子弹朝墙飞去,它接触到了两个墙,我想让接触到的墙消失,写在子弹里的代码是:
With (other) Instance_destroy();
Instance_destroy();
然后发现只有一面墙被摧毁了。 原因是一步中可以多次碰撞,即一步可以碰撞多个实例,碰到墙1后墙1和子弹就被摧毁了,所以墙二虽然也被碰到了但却没被摧毁。 解决方法是不在step事件里摧毁子弹而是stepend里摧毁:给子弹一个状态(打到墙=1,没打到=0),碰撞后不直接摧毁,在step end里检测如果state=1,再摧毁。
- 墙阻挡坦克的效果,也是预判断下一步碰撞的办法,矩形是图像的大小再加上下一步的坐标修正,如果不预判断而直接(x-7,y-7,x+7,y+7)的话,一旦碰撞了,就卡住了。马里奥也是预判断下一步的位置是否有碰撞,只不过用了线碰撞检测。
- 用一个obj去播放其他sprite的方法:draw_sprte(xxx,image_index,x,y).但是明显只有当obj的sprite和目标sprite子图数目相等才正常播放,因为sprite的image_index是调用object的。所以这个方法其实用处不大,并不能随心所欲做到没有obj就能播放sprite动画。验证方法:我用一个图像只有1帧的obj在draw事件里播放另一个4帧动画sprite,那么动画就定格了,当我把obj的图像改成4帧后,动画正常播放了。(但是视频里GM8 obj就一个子图却能播放动画。。)
- 67‘ 不让敌人斜向走是用else让上下左右不能同时触发。 坦克撞墙反向这个里面face的改变没懂,见(一些遇到的不明白的知识——红激坦克大战。)
- 按J发射子弹,子弹方向随坦克朝向而定,这个用一句代码就能实现,不用每个方向各写一行。
if keyboard_check(ord('J')) && shoot_timer==0 && instance_number(obj_bullet)<2 //发射子弹
{
var tmp=instance_create(x,y,obj_bullet);
tmp.speed=5;
tmp.direction=90*face; //巧妙,四个方向的代码本来要写四句,这一句就行了。
shoot_timer=30;
}
- 用switch函数来做概率事件们。Case 0: 小概率 default: 大概率。比如随机移动。
- 敌人的移动AI可以复制玩家的然后再改,比如按键移动改成概率移动
学习日志:功夫
功夫————这个是对打游戏,比较复杂。
- 移动。自建变量psp代表移动速度,dx代表左右按键状态,按左为-1右为1,。移动状态下用x+=psp*dx来统一实现移动。
- 出招收招。设置state,来区分状态,0移动,1出招,2收招。这个是因为出招收招不能移动。思路就是按下相应按键后:进入出招状态,调用对应的动画、碰撞判定是否击中并扣血等等,且让动画定格一段时间(计时器倒计时实现)后进入收招状态。进入收招状态接收招动画。给收招状态一个倒计时,计时结束后恢复移动状态。 都是在step里做if判断状态。 他的击打特效是作为一个obj调用的。
- 收招时如何判断刚才出的是哪一招? 用sprite_index判断。
- 像素失真问题,在官网learn教程里提到过画面模糊的原因是自动计算像素,在globle settign/graphic里。红激解释道如果官网的设置对了但还有别的奇怪问题(比如脸部某些像素位移了),那么就用draw事件里画自己的图像时(比如用draw_sprite_ext)坐标取整数。原因是没有同意取整原则,导致会有1像素的差别。
- 如何让角色在空中只能出一次腿。这个例子里是在收招状态里,给飞腿的收招状态倒计时足够长。这样他落地前不会回复到移动状态就ok了。 这个再回去看看是不是。
- 绘制血槽,实现效果:打一下就减少一格血的,而且满血为绿色此外红色。可以只做一个单位长度的血槽sprite,里面有红绿两帧,用draw_sprite_ext 来画,subimage参数填hp<6, xscale填hp或-hp。这样就能控制血条颜色和方向了。
学习日志:马里奥和功夫
马里奥进行了收尾。
马里奥————教程用了collision_line来判断马里奥是否与其他物体碰撞(检查脚所在直线、身体左右边缘线)。并通过这个来实现判断运动状态(如果是非跳跃状态即jump==0且脚下没东西,就下落并转换为跳跃状态jump==1,比如开局的自由落地以及不小心掉下去的情况),以及来做落地或马里奥顶砖块判断。 当碰撞后将物体放回碰撞前的坐标,用这个方法来实现阻挡效果或控制人物不出边界。 可以用image_index+=n写在step事件里来使动画播放。 还有,马里奥一次只能顶一个砖块,而线碰撞到多个实例时只返回一个实例的id,正好利用这一点。 这个教程里控制角色基本上是建立face(朝向)、jump、state(死亡与否)、timer、playerspeed几个自建变量来写代码,后期会调用这些东西而不是每次都填写具体的运动数值。
功夫————还没开始,只做了左右移动、限制水平移动范围。
学习日志:GMS之红激bilibili教程
没到周末就会被占用大量的时间,整个周末周一只有加起来一天多一点的空余事件,其中一部分用在了LD39的rating上,一部分用在了GMS上。马戏团完结,马里奥已开。
视频里主要的一些点如下,太基础的没有写。其实很多都是已经了解的内容,但是看看思路也是好的。
马戏团————基本的移动,并用坐标控制移动范围;让空中跳跃时不能控制方向(用变量jump=0/1区分跳跃状态和落地状态),但是又保持空中惯性(在地面上移动式规定惯性方向,跳起后用惯性方向控制移动); exit的用法(不再执行后面的代码,比如当角色挂掉的时候,就可以exit,就不会执行后面其他挂掉后不应该再执行的代码了)
马里奥————快速导入资源:把多个文件拖进GMS即可。 父对象:几种不同的墙用了父对象???(作用还不是特别清楚)
视野还没设置。
学习日志:对LD39submission的一些修改
经历了好几天,终于可以回来看一下LD39的submission了。要知道当我提交的时候自己都觉得游戏没有达到预期,基本不好玩。不过第一次设计并制作游戏,能按时提交我还是很有成就感的。我看到竟然评论还是比较正面的,总体来说就是游戏的立意不错,但是机制太难或者太复杂。
传送门: https://ldjam.com/events/ludum-dare/39/mind-battery-mind-debts
https://gamejolt.com/games/mindBmindD/273353
这两天抽空做了一些修改:
1 scanner发声机制:原来是声音高低取决于你启动它的一瞬间你所在位置距离宝藏的远近;现在修改成了随着你的移动,声音高低会时刻发生变化。这一点大大降低了难度,也使游戏的技巧性更强,因为原来的机制下你只能测得五个点距离宝藏的远近。
2 修改了宝藏数量:原来是每次下去只能挖到一个宝藏,当挖完后如果电池有剩余也就浪费了;现在是每次挖出宝藏就会再生成一个宝藏。这一点提升了游戏的反馈,因为原来几乎是完全靠运气,技术再好也只是能挖到一个。再加上鉴定宝藏需要花钱,所以如果你连续几次下矿都是挖到的垃圾,那么你一分钱都挣不到,由于下矿需要门票,几次下来基本上就没钱了。而现在只要你技术好,下一次矿就能多挖几个;由于无论又多少宝藏都只需要5金币鉴定费,那么就保证了每次都至少能赚一点点。
之后游戏的主要修改可能就会围绕整个难度调整、游戏目标的清晰化、玩法的趣味和变化性这三方面来进行吧。哦,还有,换掉所有美术素材,现在这个浓浓的小学生风啊。。。