[记录贴] 如何制作一个基于判定边界的(比较流畅的)跳跃引擎
scratch吧
全部回复
仅看楼主
level 11
怎么说呢,由于学业紧张,本人屈指一算,退坑已有一年半载之久。最近忽然灵光乍现沉迷scratch,便着手制作出了这个小程序。RT,相信各位大佬都有各自的跳跃引擎,本人也不敢狂妄谎称自己的引擎有多少出色的地方,但最起码的流畅度还是有的。考虑到同类贴子不在少数,本人会尽可能多贴代码、少说废话,下面便正式开篇。
2020年04月05日 04点04分 1
level 11
备注楼
2020年04月05日 04点04分 2
长期更新!(希望能一天解决)
2020年04月05日 04点04分
level 11
[插曲]:------制作过程中犯的一些典型错误------
1.混淆<碰到颜色-?>积木的适用范围。
A:简单来讲,该积木的生效范围仅限其所在的角色,测试方法乱搞就行了;
2.滥用<加速模式>
A:这个可想而知,请各位自行脑补[喷]
3.乱搞<运行时不刷新屏幕>
A:和(2)差不多,本人不再赘述[滑稽]
4.美工太差导致判定范围出差错
A:这个。。。本人也无话可说。
2020年04月05日 04点04分 3
level 11
[正片]:------贴代码时间到------
2020年04月05日 04点04分 4
level 11
准备工作:
下面的造型绘图将是你需要提前弄好的:
1.小猫(一打开窗口就有,注意检查两个造型是否齐全)
2.挡板(下面以底部挡板为例)
注:挡板中心需要用最右上角的十字架调整,十字架中心对准线段的中点
3.背景
只要用同一种颜色随意涂鸦就行了。还有,不要忘了你涂鸦所用到的颜色种类,后面会用到
2020年04月05日 04点04分 5
level 11
变量解释:
1.deltax和deltay(数型)
---角色横纵坐标的增量
2.is前缀系列(布尔型)
---判定角色碰撞是否应该受到支持力的(反向)作用
3.model_re_speed(数型)
---角色抖腿的速率
4.moid(数型)
---目前说不清楚,简单来讲就是告诉角色什么时候应该换腿
5.rate(数型)
---角色(水平)移动的速度
6.state(字符串型)
---应对不同类型的检测碰撞的标志变量
7.you_can前缀系列
---判断角色是否能够起跳、左右移动
2020年04月05日 04点04分 6
level 11
核心程序:
(一)小猫
---大体就类似于main函数的框架:
三步走原则:初始化、侦测、刷新。
2020年04月05日 04点04分 7
level 11
初始化分支:
各参数尽量不要更改,还有一件事,小猫的大小要和
镇楼
图中小猫的大小相仿,还有一件事,所有挡板大小都要时刻保持100%,因为调整大小不能改变角色的判定范围!!!
2020年04月05日 04点04分 8
插播一句,小猫的大小设为30%[呵呵]
2020年04月05日 04点04分
level 13
支持一下,其实大多数这种引擎的数值都是自己尝试出来的[滑稽]不过你直接说出来也是更好[滑稽][滑稽]
2020年04月05日 04点04分 9
感谢支持[酷]
2020年04月05日 05点04分
level 11
侦测左右移动分支:
主要是当左右移键同时按下后,需要将水平位移增量改为0
2020年04月05日 05点04分 10
level 11
造型切换分支:
随便打个循环就行了,达到的效果是当model_re_speed的值越小时,腿抖地越快
2020年04月05日 05点04分 12
还有一件事,如果在读贴的时候发现有几楼莫名缺失,那是因为lz有强迫症,遇到错别字就删楼[滑稽]
2020年04月05日 05点04分
level 11
主体碰撞侦测分支:
至于<重复执行>的4段语句,目前还说不清楚,后面会提到。
2020年04月05日 05点04分 13
level 11
至此,小猫主体代码全部完工。
下面进入重中之重:挡板的代码[吐]
2020年04月05日 05点04分 14
level 11
(二)挡板
---本人还是需要说一下使用“挡板”机制的原因。
1.避免太多代码堆积给主体使调试难度激增;
2.如果不使用挡板,那么就需要将实体(即不是空气的地方)的坐标信息用链表存储。
lz
之前曾经用python编写过跳跃引擎,深切感受到如果用链表存储实体带来的后果是:
---放弃<碰到颜色-?>这个大工具;
---自己打循环判定;
---实体通常只能用矩形存储。
弊端太多。而用挡板,可以使其充当判定线,再使用<碰到颜色-?>这个大工具,岂不美哉[滑稽]
3.锻炼美工[喷]
2020年04月05日 05点04分 15
level 11
挡板分支1:底部挡板(判定支持力)
判定的前提是前面<主体侦测碰撞>中的第一个state转换,将模式切换为支持力判定。
当state不是侦测支持力分支(hit_ground)时,挡板被动,受小猫的移动;
当state是侦测支持力分支的时候,挡板主动,小猫主体跟随底部挡板移动。
为什么要这么做呢?
因为纵轴增量deltay可能会达到-5这种大数值,运气不好的情况下会使小猫深陷入实体中,若挡板被动就需要参数传导给小猫使后者上升逃离实体,但侦测实体又依赖挡板,因此会出现循环依赖,无疑增加了编写难度。
2020年04月05日 05点04分 16
1 2 尾页