《纯数据碰撞箱》作品的介绍
scratch吧
全部回复
仅看楼主
level 13
热力天蝎 楼主
最近正好在重制我准备年更的作品《造梦Scratch》,为了让里面的碰撞箱看起来更丝滑,我特意先写了个纯数据碰撞的轮子。
然后我觉得这东西应该分享出来给大家修订一下,这样也免得出现一堆bug。
1L不讲,Scratch自带的小球角色
镇楼
2022年08月26日 10点08分 1
level 13
热力天蝎 楼主
2L备用
2022年08月26日 10点08分 2
level 13
热力天蝎 楼主
用户手册:
(如果需要作品源文件,请前往别针社区搜索:纯数据碰撞箱。同时,楼中楼应当包含了源文件的下载链接。如果没有链接或者链接失效,请联系我补链。)
请打开舞台角色,删除其中全部的将数据加入列表hitBoxList的积木,并运行initAll自定义积木。
请在列表hitBoxList中加入5个数据,代表一条供物体碰撞的线段:
第1,2项代表这条线段其中一个端点的坐标;第3,4项代表这条线段另一个端点的坐标。第5项代表这条线段的碰撞箱类型,目前暂时没用,请设置为0。
然后重绘主角,并且在地图上画上障碍物(用画笔直接画出碰撞箱太丑了)即可。
* * *
当然,这个碰撞箱也可以变成大地图。楼中楼应当会有一个样例作品的下载链接。
但是由于角色无法移动到舞台外,所以这个版本的作品在移动时碰撞箱的形态可能发生微妙的变化,将画笔改用角色后可以解决这个问题。
2022年08月26日 10点08分 3
基础版:https://www.123pan.com/s/enGrVv-j5Zgh 大地图版:https://www.123pan.com/s/enGrVv-V5Zgh 提取码均为rltx
2022年08月26日 10点08分
对了,这里的几个程序都有按q结束全部的积木,各位使用时注意删除[滑稽]
2022年08月26日 10点08分
level 12
支持[滑稽][大拇指]
2022年08月26日 10点08分 4
[滑稽][玫瑰]
2022年08月27日 04点08分
吧务
level 15
占个后排,果然还是写成技术贴了[滑稽]
2022年08月26日 11点08分 5
教程还没写好而已[滑稽]
2022年08月27日 04点08分
level 13
热力天蝎 楼主
在这个作品中,每个碰撞箱是一条线段。这条线段过两个点(x1,y1)和(x2,y2)。
由平面几何知识得,这条线段所在直线的方程为
物体的行进轨迹也是一条线段,而且这条线段已知一个定点和它与竖直方向的夹角。
由平面几何知识得,这条线段所在直线的方程为:
(式中的d即物体的方向)
然后将(1)(2)两式联立,就可以解得:
这里解出的x和y就是这个物体如果一直沿当前路径运动,将会碰撞在碰撞箱直线的某处。
现在我们获得了这个交点。而这个交点的意义是:如果这个物体的运动长度足够,这个物体一定会在这个位置与碰撞箱碰撞。然而存在两个问题:一、交点可能不在碰撞箱上(也就是不在这条线段上);二、交点可能不在运动轨迹(仍指线段)上。
碰撞箱很可能没有挡在物体的运动轨迹所在直线上。因此在作品中,需要判断这个交点是否在运动轨迹上。这个判断十分简单,只要看这个交点的横坐标和纵坐标是否处于两个端点的横坐标和纵坐标之间。如果是,那么这个交点就在运动轨迹上。
这个碰撞点已经处于碰撞箱上了,但物体的运动长度往往不足以让物体碰撞到。因此我们需要检测这个物体在运动一定距离后,会不会到达碰撞箱所在直线的另一端。由平面几何知识得,我们只要将物体运动前后的中心点带入直线方程的左边,如果结果的正负不同则代表两点在直线的两端。因此,在本作品中有一个函数pmJudge,用于检测移动前后这个物体的中心是否处于碰撞箱不同的两侧。如果判断出了这个物体运动这么长的距离,真的会碰到碰撞箱,就应该让这个物体移动到交点这里,而不是让物体移动原来的步数。
此时,这个碰撞箱的一代产品已经诞生,我留了一个备份,楼中楼应该会出现这个备份的下载链接。如果没有链接或者链接失效,请联系我补链。
2022年08月27日 04点08分 6
一代的代码在这里:https://www.123pan.com/s/enGrVv-65Zgh 提取码:rltx
2022年08月27日 04点08分
这个版本的物体体积是没有的,所以建议不要改变size参数以免发生意外[滑稽]
2022年08月27日 04点08分
1