最新消息:680元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

Scratch教程:角色飞到边缘后的消失处理

Scratch 少儿编程 14203浏览 0评论

友情提示:680元/半年,儿童学编程,就上码丁实验室

在使用Scratch 进行动画及游戏设计时,常常需要处理角色飞到边缘后消失的情况。但细细研究后会发现,何时让角色消失并不像看起来那样的简单。这里我们集中讨论一下这个问题。

我们制作这样一个实例,让小猫角色在屏幕的中心,之后每1秒会转向随机的方向并产生一个克隆体,克隆体沿此方向不断运行,到边缘后消失。

角色的代码如下:

离开你真的不容易

下面我们用几个算法对消失进行判断和处理。

 

算法1

直接碰撞检查

使用角色与边缘碰撞的检测。克隆体的代码如下:

离开你真的不容易

效果如下:

离开你真的不容易

从图中可以看出,一旦角色有一个点碰到了边缘,就会立即消失,感觉消失得有一些突然,视觉效果并不好。

 

算法2

中心点出界判断

 

下面使用的算法中,通过判断角色的中心点坐标是否超出了范围来决定消失。我们知道舞台的坐标范围,所以使用(x<-240x>240, y<-180y>180)就可以判断角色的中心点是否移出了边界。

程序如下:

离开你真的不容易

效果如下:

离开你真的不容易

可以看出,这次当角色的一半移出时,角色消失了,比上一个方法要好一些,但还是不够好。

那么如何去做呢?

 

算法3

根据坐标的变化

我们观察一下,如果角色超过了边界范围后,坐标会如何变化。

使用下面一个简单代码进行测试。

离开你真的不容易

运行此程序后可以看到,当到达边界后,小猫只露了一个尾巴,就不再继续向右运动了,查看坐标能够看到最终的坐标是x=271,而不是x=300,也不是x=240

离开你真的不容易

 

如果小猫是斜向运动到边界的。我们就可以看到,当小猫到达右边界后,它会沿着边界向下移动,即x坐标不变,y坐标不断减小。

实际上大家通过使用Scratch软件能够感觉到,软件中的一个原则就是不让一个角色完全移动到边界外面这一点与其它很多的软件都是不同的。

根据到达边界后,x,y坐标不再发生变化,我们可以设计出算法3。也就是当x坐标超出边界范围后,一旦发现x坐标不再改变,就可以将此克隆体删除了。

代码如下:

离开你真的不容易

这里定义的oldxoldy记录了移动前的坐标,dxdy在角色移动后,对坐标进行判断。如果x超过了-240,240的范围,而x坐标已不再发生变化时,就认为已出了边界,删除克隆体。需要注意,这里使用的四个变量都必须是局部变量(只适用于本克隆体)。

效果如下:

离开你真的不容易

可以看出,这种方法比较好地处理了这个问题,在小猫还剩下最后一点的时候才消失。但仔细考虑,这个方法还有一些限制条件,如果中心点不在角色的内部,或移动的方向发生改变时,也可能出现误判。

看来,这一个在边界处消失的问题,还真的不像看起来那样的简单呢。

 

算法4

基于坐标计算运动时的检测方法

 

在控制物体移动时,实际上有两种方法:

01

一种是使用向当前方向移动几步的方式。

 
02

另一种是通过程序计算出角色应该到达的位置,再把角色利用移动到积木移到指定位置

如果是使用后都控制角色的移动,那么检查出界的方式就简单了,只需要检查角色当前的位置和命令移动到的位置是否相同,如果不相同,就说明角色已经超过边缘了。

程序如下:

离开你真的不容易

算法4能够完美地解决算法3中的其它问题。可以说是一个比较好的解决方案。

效果如下:

 

离开你真的不容易

可以看到:算法的选择不但和检测的算法有关,还和控制角色运行的方式相关。大家可以理解各个算法的思路,在不同的场合,根据实际情况使用。怎么样?下次再遇到类似问题的话,相信你一定能够找到一种合适的方法来处理越过边缘问题的!

 

 

结语

1、提出了四种算法,算法1使用碰撞边缘,算法2使用中心点坐标的检查,算法3检查Xy坐标是否已不变,算法4在使用计算坐标控制角色时,检查xy是否与实际位置不一致。

2、Scratch在处理边界处角色时有一定的问题,但也为我们发挥想象力解决问题提供了一个很好的例子。

您必须 登录 才能发表评论!