导航菜单
首页 » 分享 » 正文

从“愤怒的小鸟”学习用编程展示物理规律

大家应该都玩过愤怒的小鸟游戏吧。有没有思考过游戏里的物理规律以及用编程如何实现它们呢?今天我们就来通过做一个版的愤怒小鸟来学习一下如何用编程展示物理运动规律。

这篇文章适合初中以上文化的读者。学霸随意。

如上图的游戏画面,细心的同学是否发现了愤怒的小鸟移动的一个重要的特点:小鸟发射出去后的移动轨迹并不是直着飞过去的,而是像我们日常生活中向外抛东西时一样,它的轨迹是弯的。并且无论它一开始向哪个方向移动,都会有一个向下的移动趋势,好像无形中有一股神秘的力量在一直向下拉着它一样。这种运动轨迹很形象地被人称为抛物线----就是把东西抛出去的运动曲线,像下面这些都是抛物线:

在用画抛物线之前,我们先来学习一下如何在里实现物体移动的力学规律。

先来解释(复习)一下关于移动的几个重要概念:

-距离:两个物体之间的远近关系,比如1米、10厘米等。

-时间:衡量两个事件发生的先后关系和间隔。比如1小时、1秒等。

-速度:是描述物体移动快慢和方向的物理量。要注意物理学上的速度是有方向的。速度的大小一般用100公里每小时、10米每秒等方法表示。平均速度或者说匀速移动的速度=距离/时间。

-加速度:如果说速度描述了位置是如何变化的,那加速度就描述了速度是如何变化的。它是速度矢量对于时间的变化率,描述了速度的方向和大小变化的快慢。它的国际单位是米每二次方秒(m/)。平均加速度或者说匀加速移动的加速度=(当前速度-初始速度)/时间。

那么在里如何展现这几个物理概念呢?

1. 距离:的舞台是一个像素的二维画布,我们可以认为一个像素就是一个单位的距离长度。所以距离的表示逻辑和现实世界是类似的。

2. 时间:的时间计量和现实世界完全一样。

3. 速度:没有一个直接的速度指令。但是我们可以通过组合指令来让物体以我们需要的速度来移动:

- “在?秒内滑行到x:?y:?”是实现匀速移动的最简单指令– 前提是要提前知道移动的起点和终点,以及时间,但是它只能实现匀速移动。

- 我们也可以用循环来实现可变速运动。看下面这个指令:

由于(速度=距离/时间),我们给循环一个固定的时间间隔,在每次循环里移动一个距离,那么在每次小循环里它就是匀速移动的(这个例子里的速度是10步/0.1秒=100步每秒)。只要循环的间隔足够小,看起来的效果就是连续移动的。大家可以把等待间隔改成0.01秒,然后通过“编辑”-“加速模式”开启加速模式下体验一下。注:在加速模式下循环间隔才能改成更快的值。

现在,我们其实可以这样理解:一个很小的时间里的“平均速度”其实就是“瞬时速度”。把循环时间间隔固定在一个很小的值情况下,移动的步数其实就代表着速度。----大家千万不要小看“把时间间隔分成很小的部分”这个小技巧,它其实是更复杂的微积分的基础及奥妙所在!

你可以通过改变移动步数来体验一下“在固定时间间隔的循环里,移动的步数就代表着速度”这个概念。所以,上面的指令可以改成:

改变速度的效果:

4. 加速度

由定义公式:加速度a =(当前速度V - 初始速度V0)/ 时间t,可得出:

当前速度(或叫瞬时速度)V = V0 +a*t

我们就可以用下面的指令来实现一个匀加速移动:

大家可以尝试改变初始速度V0和加速度a的值来体验一下它们之间的关系。记得要试试让它们变成负数哦。

我们尝试让物体一开始由下向上以正的V0速度移动,给一个负的加速度a,像下面这个指令:

是不是发现这时物体移动有点奇妙了(先向上再向下;向上时速度越来越慢,向下时速度越来越快)?像我们平时把物品垂直向上抛时的轨迹--对了,这也是一条有点特殊的抛物线。

下面我们正式来学习画抛物线:

斜抛运动和抛物线

物体以一定初速度斜向射出去,在空气阻力可以忽略的情况下,物体所做的这类运动叫做斜抛运动。斜抛运动物体做匀变速运动,它的运动轨迹是抛物线。

根据运动独立性原理,斜抛运动可以看成水平方向的匀速直线运动和垂直方向的匀减速运动来处理。

假设初速度为V0,初始运动方向是A,则:

水平方向速度:V1 = V0 * sinA

垂直方向速度:V2 = V0 * cosA – a*t

在里,横坐标变化就代表了物体的水平方向运动;纵坐标变化就代表了物体的垂直方向运动。所以下面两个指令是等价的:

也就是说,“x坐标增加的数量等于水平速度”。

所以,“水平方向速度:V1 = V0 * sinA”可以写成:

“垂直方向速度:V2 = V0 * cosA – a*t”可以写成:

上面的t就代表时间,每重复一次就增加1,代表着时间的线性增长。

把上面的指令整合起来,就是一个抛物线运动轨迹了:

注意这里的三个关键参数:

-初始速度大小V0和初始速度角度A:它们决定了物体可以抛得多快和多远。在我们的游戏里,这个应该由玩家来控制。

-加速度a:它决定了物体会多快降落。在现实生活中,a和地球引力g有关,是一个常量(就是值不会变的参数)。我们的游戏里应该事先调节好这个参数。然后玩家不能改变。

好了,到这里我们的愤怒的小鸟需要的物理知识和实现方法就全部明白了。我们可以完成游戏了。游戏的元素包括:

-一只可以移动的小鸟角色

-一只出现位置随机的猪的角色

-让玩家控制小鸟的初始速度角度和大小。角度通过左右键调节;大小通过按空格键来调节,按的时间越长速度越大;放开空格键就发射

-小鸟发射后按抛物线运动

-小鸟碰到猪就胜利;否则失败

这是最终的效果和小鸟角色的程序

大家可以在这个简单的游戏实现基础上增加更丰富的背景、细节、音效和变化让它更好玩。

很多模拟现实的游戏都要用到抛物线的效果,比如炮弹发射、烟花效果、喷泉、球的运动轨迹等等。大家做这些游戏和动画的时候记得要运用抛物线才真实哦。

最后,大家做完作品记得和我们分享呀。

《从“愤怒的小鸟”学习用编程展示物理规律》来自微信公众号“千里马快乐编程”,特此致谢!

课程推荐

评论(0)

二维码