Scratch 3.6角色碰到边缘反弹方向再讨论

引言

在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。
若碰左右边缘,入射角与出射角符号相反。

小结

有了上面结论,在开发小游戏时,即可区别对待,在判定出上述大的碰撞类型之后,再计算反弹角方向与大小就比较容易了。

引用

http://www.360doc.com/content/18/0517/08/6507680_754592197.shtml

原文地址:https://blog.51cto.com/zhuxianzhong/2484496

时间: 2024-10-03 03:03:51

Scratch 3.6角色碰到边缘反弹方向再讨论的相关文章

unity3D中使角色朝着鼠标的方向

思路:首先要获得鼠标的世界坐标(鼠标的位置坐标默认的是屏幕坐标),当鼠标点击时,角色朝着鼠标的方向移动: input.mousePosition获得的是鼠标的屏幕坐标: Vector3 world; public float speed; void Update() {     if(Input.GetMouseButtonDown(0))     {         Vector3 m_pos=Input.mousePosition;         Vector3 player_pos=Ca

Scratch编程小秘笈01:方向与坐标巧记忆

[问题]Scratch中任何精灵的编程全靠一个坐标系中方向.坐标值变化等数据的修改来实现,那么如何迅速.准确地记忆Scratch中的坐标系呢? [回答]先看下面的坐标系示意图: 中学数学中的直角坐标系,0度在正东向.因此,两种坐标系相差90度.默认情况下,Scratch中的任何一个精灵都是朝向90度的.把握这一点后,再牢记: 顺时针时度数增加,逆时针时度数减少 于是:**90+90=180---------正下方180+90=270---------正左方270+90=360---------正

图形化编程娱乐于教,Kittenblock实例,克隆效果

跟很多学生聊过,很多学生不是不努力,只是找不到感觉.有一点不可否认,同样在一个教室上课,同样是一个老师讲授,学习效果迥然不同.关键的问题在于,带入感,我能给出的建议,就是咬咬牙,坚持住,没有学不会的知识.会陆续分享图形化编程的经验,希望能够做成一个专题.如果您觉得有用,就给点个赞吧.涉及的软件包括scratch3.0 (.sb3).Python.Kittenblock. 程序解读:克隆效果 知识点:运动,控制,循环,克隆效果 涉及的软件:scratch3.0 (.sb3).Python.Kitt

Exchange Server 2016安装部署系列三: 边缘传输角色部署及边缘订阅

本篇博文进入Exchange server 2016 安装部署系列的第三部分:Exchange server 2016的边缘传输服务器安装及边缘订阅功能配置,本文以 edge 服务器为例进行演示安装,该服务器将作为Exchange server 2016 的邮箱边缘传输服务器角色.对于该文章不完善之处,望在评论区指正,万分感谢 . 边缘传输服务器简述 边缘传输服务器通过提供邮件中继和智能主机服务为你的 Exchange 组织处理所有入站和出站 Internet 邮件流.运行在边缘传输服务器上的代

Unity3d 角色穿墙, 或者互插的解决方案

如果你在Unity里面使用了Rigidbody, 并且勾选了Is Kinematic 想自己通过Transfrom来控制角色的位置的话.那么你一定会碰到如果角色跑动快了,会插入到其他运动的角色或者静止的单位中,比如墙壁,建筑等等. 1:网上的解决方案: (老的解决方案) 网上到是有解决方案,不过都太复杂,都需要自己去预判下一步的步长,这个就是以前的没有引擎的老方法,原理就是如果下一步会被碰到就把下一步的位置直接设置到碰撞的边缘,而不是走满那一步.既然说到这里我们就要说一下Unity带来的全新的解

少儿编程Scratch第三讲:宇宙大战.枪战游戏

小朋友这周的表现还算不错.周末多数时间都由我陪(bi)着(zhe)做课本上的数学题,后来还学了英语.任重道远啊,语数外都还得加强,还远不到自己就能取得好成绩的阶段. 上周说好这周要做一个发射炮弹的游戏.最后在周日晚上八点学习完英语以后才开始. 目的 目的:设置一艘宇宙飞船或其他角色,实现上下左右移动.每按一次空格键即发射一枚炮弹,同时播放声音,炮弹往屏幕上方飞,直到飞出屏幕.发射子弹.炸弹是很常见的游戏功能. 实现方式 宇宙飞船角色的上下左右移动是比较简单的.我们在接球运动中已经学过了.只需要不

少儿编程Scratch第四讲:射击游戏的制作,克隆的奥秘

上周的宇宙大战射击游戏中,我们只完成了宇宙飞船发射子弹的部分.还未制作敌对方.这周制作了敌方-飞龙,飞龙随机在屏幕上方出现,如果被子弹打中,则得分,飞龙和子弹都消失. 敌方:飞龙:计分. 目的 目的:制作射击游戏的敌方-吐火的飞龙.当子弹碰到飞龙时,飞龙被消灭,同时增加分数. 实现方式 克隆依然是重要的操作. 每一只飞龙出现时,都需要先克隆一份,然后设定一定的随机方向,从屏幕上方往下移动.为了让飞龙有飞的感觉,我们切换飞龙的造型.飞龙在普通造型和吐火的造型中来回切换. 如果碰到子弹(闪电),则删

scratch少儿编程第一季——05、移动还可以这样动

各位小伙伴大家好: 上期我们学习了怎么控制方向和移动的程序块. 今天我们继续学习运动模块下的其他9个指令(程序块). 首先来看前面两个关于x坐标的程序块. 分别是将x坐标增加()单位,和将x坐标设定为(). 现在我们将10改成100,点击运行会发现小猫往右移动了100个像素单位. 下面大家可以试试把100改成-100.看看是什么效果. 如果我们把(将x坐标设为0)程序块拖入右边,然后点击运行. 会发现不管你把小猫放到哪里,它都会回到屏幕中间. 大家也可以试试设为其他数值.看看会回到什么位置. 接

Houdini中角色通用修穿插方法

公司特效组最近一半的人一直都在做着修穿插这样的一个重复的事情,听说来公司之前大家也都一直这样做着,这种完全不能把艺术家从重复劳动中解放出来的状态确实有点让人神伤.最近本人也在做着这方面工作,想借着这个机会,总结一下自己这方面的经验,也重点探讨一个能够适用常规多数角色穿插问题的解决方法.希望能做到抛砖引玉的效果. 首先聊一聊角色动画中常见的两种穿插情况. 第一种比较常见的是角色与其他物体的穿插,比如手拿杯子脚踩地.这种情况的解决方法比较灵活,因为是两个物体,所以常常可以使用volume的那套方法找