制作碰撞箱
碰撞箱是计算机图形学和游戏编程中的一个概念,用于确定两个物体是否发生了碰撞,以及如何处理这种碰撞。简单来说,它是围绕物体创建的一个虚拟盒子,用于检测和响应用户或其他物体的交互。
我们新建一个角色,名叫“碰撞箱”,然后把素材包中“场景1.碰撞”的造型放进去:
好!让我们开始coding吧!!
添加碰撞箱放置模块
首先,我们将“地图”中的放置模块复制到角色中,并将相关用词改掉:
再加上我们万年不变的——初始化!放置ta!
跟随玩家移动
好,我们开始制作跟随的部分。
我们地图中,用了广播来同步移动,这也是为了方便碰撞箱同步
由于刚才放置中,我们把id设为了 场景1.碰撞。这里我们先判断id,再移动:
很好!
但是,这时即使加上了碰撞模块,也会出现一个问题:碰撞没有侦测到。这是为什么呢?
(这里啸天犬给你们提前排过雷了)
解决问题
这个问题是因为,一个角色在隐藏的时候,他的碰撞会被忽略。因此,我们用“将虚像特效设为100”来代替:
好!那么,就开始做碰撞时的处理吧!
处理碰撞
现在,我们新增一个广播,名叫“检测碰撞”,然后切换到 玩家 角色。
把这个广播放到“同步移动”的下面
我们拖出来“检测碰撞”的广播hat,再新建一个变量。
这个变量是私有变量,类型是number(数字),用于记录上一刻的x坐标
因此,得变量名为“*上一刻x:number”
好,让我们开始写碰撞!写完我再解释。
这里我们使用的逻辑是
如果碰到碰撞箱,就将玩家x设为上一刻的x,再同步一次移动,让玩家回到没有碰到墙的地方。
然后把上一刻x设为现在的x,因为现在的x是没有碰到墙的。
这里我们用的是广播,且在循环里,不会出现卡墙的bug!这就是scratch奇奇怪怪的运行顺序!
测试时间!
好,让我们打破那面绿旗!
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=bugdog-story/bugdog/lec03b&type=comment"
title="{跟着多bug的啸天犬制作剧情解密游戏 03b}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>