极客小将

您现在的位置是:首页 » scratch编程资讯

资讯内容

Scratch第四十七讲:台球(多一个台球)

极客小将2021-02-08-
想了解编程技巧,就请点击上面蓝字:跟我学Scratch编程,关注CC哥 首先祝大家五一节快乐哦,想必大家都出去玩了,CC哥在家继续给大家讲Scratch。

想了解编程技巧,就请点击上面蓝字:跟我学Scratch编程,关注CC哥

首先祝大家五一节快乐哦,想必大家都出去玩了,CC哥在家继续给大家讲Scratch。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

今天还继续讲台球,台球这个游戏其实CC哥想了很久的,这个游戏说简单了其实就是一个碰撞,但是如果我们上网看看,通常没什么用scratch做的比较好的台球游戏,为什么呢?因为复杂。大家大多数看的都是一个球的台球游戏,很少见到两个球,为什么呢?因为球和球之间会碰撞。一旦碰撞就会发生路径的变化,在一个球台里如果有多个球,那么相互之间的碰撞就会变得非常复杂。你怎么处理呢?想想就会头疼。今天CC哥就来尝试在台球桌上放两个球。游戏还是在上一讲的基础来做。

这个台球有意思没有,CC哥为了把球打进洞,自己还练习了挺长时间,还真是有点不容易。https://cdn.china-scratch.com/Public/Home/images/grey.gif

下面讲讲这个程序,这个程序在球台上增加了一个球,游戏的目的是用白球击打这个蓝球,把球打进洞。

程序的难点是,当白球击打到蓝球的时候,这两个球的运动轨迹会发生什么变化。如果想让运动轨迹符合实际,那么就要用点物理的知识了。如果白球正好击打到蓝球的球心,那么白球的动能应该全部传递给蓝球,而白球就要静止下来。如果白球没有打到球心,那么蓝色的球和白色的球会分别弹向不同的方向,并且各自的速度也不一样。那怎么计算呢?

upload/article/images/2021-02-08/45b06c20465e656a78e9407fb15d2c66.jpg

看一下这个图,当下面的球撞到上面的球的时候,会有这四个关系:

   上面的球会往v2的方向走,下面的球会往v1的方向走;

    v1和v2的角度是垂直的;

    v2的方向是沿着两个球心的连线;

    v1²+v2²=v²

有了这个撞击的规则,大家知道两个球碰撞的程序怎么设计了吗?

upload/article/images/2021-02-08/ed3ad3d38b1a635fb8910c5a276b6b3d.jpg

注意,这里只是一个球撞击另一个静止的球的做法,所以我们今天做的程序只是设计了白球去撞击静止的蓝球,如果撞击之后两个球都在运动中发生的碰撞,CC哥今天没做。大家也可以看看如果两个球同在运动中的时候,如果发生碰撞,路径和速度的算法应该如何。

程序讲解

首先增加了一个角色,就是蓝球,ball2。

这个蓝球的程序CC哥就是用角色的运动来处理了,而不是再象白球那样用画笔来画了。也是为了处理简便。白球的程序基本没变,大家可以参考上一讲。

upload/article/images/2021-02-08/1bc37eb67d11aa887f6a41b26f6ea12c.jpg

今天重点讲的是蓝球的程序。

upload/article/images/2021-02-08/888b28f67f902257ce84d69c49ee3a64.jpg

这段程序有几个部分:

1:检测颜色来检测是否发生两球的撞击。

2:如果发生碰撞就先检测蓝球在碰撞后的方向。

upload/article/images/2021-02-08/30a49044ea00345037912a4fc684e1d2.jpg

当两个球发生碰撞时,先让蓝球面对白球,这时候就是蓝球面对白球的球心。那么蓝球下一步要弹开的方向,就是两个球心连线相反的方向。同时用faceballangle记录下来蓝球下一步要走的方向。

3:算出蓝球和白球弹开的初始速度。

upload/article/images/2021-02-08/e01d313bc6952427ae064063993a31c3.jpg

这个可以用刚才讲的原理来算出来。

蓝球的速度speed2=白球的速度Dist * cos(白球原始方向与两个球心连线之间的夹角)

白球的速度dist=白球的速度disi * sin(白球原始方向与两个球心连线之间的夹角)

4:算出白球的方向。

upload/article/images/2021-02-08/49d784c6b66ee3e047683a953fb634be.jpg

这个要做一个判断,要看白球是偏左撞击,还是偏右侧撞击,如果偏左侧,那么白球会往左弹,如果偏右侧,那么白球会向右弹。取决于白球原先行进方向的角度,和蓝球下一步要弹开的方向角度之间的相互关系。白球弹开的方向是和蓝球运动方向垂直的。

5:蓝球的运动轨迹

白球有白球的运动程序,所以只要确定了撞击之后的速度,和方向,那么运动的部分就不用做了,因为上一个程序已经做了。这里就只需要做蓝球的运动轨迹程序就行了。

upload/article/images/2021-02-08/f93e6066d2abc8e057cbf79c6621dbb8.jpg

speed2是蓝球的初始速度,每步减少0.05,代表了速度越来越慢,之所以写0.05,是跟白球的运动同步,让大家在减速的步调是一致的。

蓝球在撞到边框一样会发生反弹。这里跟白球一样,我做了一个自定义的积木,用来处理蓝球跟边框碰着后所发生的方向改变。

6:蓝球碰到边框的程序

upload/article/images/2021-02-08/1101c96f928e5c15f7303778e6040562.jpg

这个部分跟上一个白球的碰撞检测差不多,这里就不重复讲了。碰到边上之后的移动speed2步的命令,其实是让蓝球离开四个台边。

球进洞的程序:

球是要打到洞里的,那么我们看看蓝球进洞是什么程序控制。

upload/article/images/2021-02-08/496e35781543eb77415b2c3d11470471.jpg

这个进洞检测跟白球的进洞检测是一样的。进洞的效果就是消失后在球台的正中间再次出现。这里就不讲了。

今天的讲解没有做太多内容,重点就是两个球碰撞之后的速度和方向的计算方法。大家掌握了这个技巧,以后做碰撞的游戏肯定会生动很多。


声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除

网友点评

共有5条评论来说两句吧...

在线客服