Back

posts /
Scratch胡扯 | 大地图的离谱

"是真的离谱"
发布时间 2022/7/8 更新时间 2024/10/4

这篇文章真是让我蚌住了(

那话说回来,这令人闻风丧胆的大地图到底该如何实现呢 awa?

主人公脚本

移动

这个在大地图中和小地图类似呀。

首先,这些变量是必不可少嘚~。

jBqfhQ.png

然后就可以实现键盘控制和速度缓慢减小的效果了。

键盘控制代码


FAQ

啊啊啊啊!这一大段什么意思啊?

jBOFrq.png jBOFrq.png

这一段实际上用了Scratch和大多数编程语言(为什么是大多数呢,因为Rust就不是awa)在布尔值的计算中会转化成数字特性(

众所周知,Scratch坐标系中向左就是负,向右就是正,所以假设按下了A键,就会向左走,也就是(0 - 1) × 2 = (-2),自然就是向左走啦~其他的也是一个道理。

jBXwhF.png

这部分就是让速度慢慢地变为0,比如一开始是-2

(-2) × 0.85 = -1.7

(-1.7) × 0.85 = -1.445

TIP

Δx=ΔxvˉΔx=Δxvˉ\Delta x = \Delta x \bar {v} \rArr \Delta x = \frac{\Delta x}{\bar v}

如果 vˉ\bar v#速率常数Δx\Delta x^速度X 的话,如你所见,这实际上是个反比例函数(

慢慢地缩小就变成了0


jBXLAf.png

这边就直接将x和y直接增加速度X和速度Y就可以了。


FAQ

¿为神马没有移动到XY积木?

这个在摄像头章节中会讲到。

摄像头

这大名鼎鼎的摄像头和摄像机的镜头实际上就是一个意思。这货因为跟着XY走,所以大概可以理解为显示在屏幕上所有物体的中心


FAQ

这为什么要用它呢?

实际上没了它也彳亍,只不过是在后期实现场景的单独移动(比如逃离物理卷BOSS关中缓缓移动到BOSS的身上再回来),摄像头跟随(比如《不妙》的猫爬架&救赎中的地图缓缓地移动到角色身边),走在地图中间定在中间,走到尽头移动的效果(这几乎是每个大地图都有的吧……)等的时候还是有很大の作用嘚!

当然,小地图也是有摄像头的,只不过是摄像头的坐标是(0,0),大家都懒得写而已(


下面就定义摄像头X摄像头Y的变量吧~

jBbhsx.png

很妙。为了实现摄像头跟随的效果,我们把摄像头X和摄像头Y直接设为xy就行啦~

jBbVaD.png

把这段代码放在之前的代码之后就行啦!


如何实现上面移动的问题呢?

jBxemR.png

这个时候x = 摄像头Xy = 摄像头Y,所以x坐标和y坐标都是0,也就实现了走在地图中间时定在中间的效果(^-^)V!

实际上物体也是一个道理,上面说过可以把摄像头看成显示在屏幕上所有物体的中心,所以也就是:

(物体X - 摄像头X, 物体Y - 摄像头Y)


现在有个大问题,就是这人奋不顾身,会从地图上掉下去(

快让摄像头不要跑出去!

jDSres.png

这段代码很简单,就是如果摄像头跑出去了,就把他硬生生拉回来。

把这段代码放在摄像头设为XY的代码之后就行啦~ 千万不要放在移动代码后面 w

这样在返过去看上面的移动代码,假设这时候x = -1145,而摄像头X在不出现空白的情况下最大X = -1045,那么:

(-1145) - (-1045) = (-1145) + 1045 = -100

主角就向左走,也就实现了走到尽头移动的效果的效果。


FAQ

什么是<地图上|下|左|右 最 大|小 X|Y>?

实际上就是角色(上|下|左|右)在不出现空白的情况下能走到的(X|Y)。


检测碰撞

这里就不得不提一下碰撞箱了awa~

你可以把你看见的图案看做一个贴纸,而碰撞箱就是一个跟在贴纸下面的一块小钢板,是有碰撞面积的物体。

所以这个在你眼中看到的物体被称为贴图,而真正的物体碰撞箱


FAQ

我什么时候要用碰撞箱?

话说几乎每个大地图作品都有,用就完事儿了!


那碰撞箱和角色的碰撞到底怎么实现呢?

方法1

这个方法是MBZZW漫步者之王的作品隔离区中使用的方法,相比于方法2代码更多效果更好

jDmA39.png


FAQ

!!!这太复杂了吧!

看起来很复杂对吧?实际上就是在移动的时候尝试继续向移动对应的方向走,如果碰到碰撞箱了就继续走,如果还是碰到了碰撞箱,就不更新x或y的值,如果没有碰到,那就继续执行将xy增加速度XY,并回到试探之前的坐标。


jDeiQI.png

这样段我也不大理解(大概就是根据速度动态移动距离吧!


方法2

这个方法是Arkos所有大地图作品普遍使用的方法。

jDyfoV.png

这个方法也是在试探位置,如果碰到就返回原来的位置。

地图移动

地图移动和角色的移动应该是相反的,或者说按照上面物体位置可以看成是:

(0 - 摄像头X, 0 - 摄像头Y)

这很简单,就不用代码了吧~


这一篇文章并没有讲述具体的游戏主体,这里就贴一下哈。

jDgDJK.png

jDgbLj.png

jD2ZY6.png