引言
在Scratch中角色的移动是按一定方向移动的,所以方向在角色的移动中很重要,特别是在绘制一些几何图案的时候,不仅要考虑好移动距离,还必须确定好移动方向。
下图给出Scratch 3.X中精灵的方向规定。
Scratch积木“碰到边缘就反弹”
Scratch的基本积木模块“碰到边缘就反弹”,其反弹遵循物理学上光线的反射规律,即“入射角等于反射角”(入射方向与法线夹角为入射角;反射方向与法线夹角为反射角)。参考下图:
为了下面讨论方便,我们特别定义一个概念,即精灵的方向角。
【定义】沿原点向精灵的中心点作射线,则此射线与Y轴正方向的夹角,称为“精灵的方向角”。
这个角度与角色的方向角之间有如下关系:
当角色碰到的是上下边缘反弹后,
如果角色的当前方向角为a=30,150,-30,-150,则其方向角为150,30,-150,-30。规律:符号相同,且和为180。
当角色碰到的是左右边缘反弹后,其方向角为-a。
如果角色的当前方向角为a=30,150,-30,-150,则其方向角为-30,-150,30,150。
利用上面规律,在程序中如果让角色碰到某角色或颜色后反弹时,其反弹后的方向可用上面的办法确定,从而使我们的程序中的反弹效果更符合实际情况。
特殊情况
当一个角色移动到屏幕四个角位置而它体积又比较大,从而出现这个角色与相邻两边缘相碰的情况,那么它的反弹方向是如何的呢?
实验的结果是:反弹后的方向是原来方向的反方向,即:
原来是45度方向时,反弹后的方向是-135
原来是-45度方向时,反弹后的方向是135
原来是-135方向时,反弹后的方向是45
原来是135方向时,反弹后的方向是-135
若碰上边缘与下边缘,如果入射角为正/或负,则出射角为正/或负,即符号相同,两者入射角与出射角绝对值为180。
若碰左右边缘,入射角与出射角符号相反。
小结
有了上面结论,在开发小游戏时,即可区别对待,在判定出上述大的碰撞类型之后,再计算反弹角方向与大小就比较容易了。