資訊內容
Scratch打磚塊游戲課程-第三講:物理中的速度

速度是矢量,有大小有方向,它描述物體運動的快慢,和反映物體運動的方向;速率是標量,有大小沒有方向。
所以當我們把速度放在直角坐標系時,我們就可以通過X坐標和Y坐標去控制速度的大小和方向。
直接講解這些物理知識,可能感覺會比較抽象。幸好我們可以通過完成小球發射功能去深刻的理解速度的概念。

添加速度
首先,我們建立“設置小球發射速度”和“移動小球”的自定義積木,代替原來的“移動5步”積木。
為什么不再使用“移動5步”積木呢?因為這個積木使用起來不夠靈活,而且我們重新完成一個類似的功能難度也不太大。
現在我們先添加兩個變量,分別命名為X和Y,通過這兩個變量我們去控制小球的速度。

把兩個變量添加后,我們來談談為什么X坐標和Y坐標同時變化就可以讓小球移動。
在Scratch里,最有效的移動方式有3個積木,分別是“移動10步”,“將x坐標增加10”和“將y坐標增加10”。單獨使用它們時,都無法實現一個角度控制的問題,但是同時使用“將x坐標增加10”和“將y坐標增加10”就可以達到預期的效果,例如:兩個積木增加同等的數,那么他們就會從45度角發射出去。

所以我們開始完成“設置小球發射速度”和“移動小球”兩個自定義積木。

在“設置小球發射速度”積木中的“如果那么”積木的作用是什么呢?這個功能是我們希望在發射角度隨機的同時,X不等于-1、-2、0、1、2。因為這樣會導致出現一個發射角度接近90度的情況,90度的發射會導致小球無法實現除了垂直以外的反彈。

碰到邊緣反彈
去掉“移動5步”的積木后,我們緊接著就要去掉“碰到邊緣就反彈”積木了。為什么不能通過“碰到邊緣就反彈”積木實現碰到邊緣反彈的功能呢?原因是我們還需要實現碰到磚塊和碰到擋板反彈兩個功能,而且我們碰到底部是不能反彈。
那么反彈是如何實現的呢?我們先看看反彈右邊邊緣時,小球的路徑是怎么樣的。

可以通過上面的坐標圖看出,只需要把X變量乘-1,就可以實現反彈,因為Y坐標是無論反彈與否,小球是依舊向上移動的,所以Y變量是不需要改變。
那么舉一反三,我們添加一個“檢測小球是否出界”的積木,完成碰到右邊,上方和左邊的反彈功能吧。

那么碰到擋板反彈時又是哪個坐標發生變化呢?


碰到磚塊
當“小球”碰到“磚塊”,我們需要實現兩個功能,反彈和磚塊消失。
其實碰到磚塊的反彈和碰到擋板的反彈,原理是一樣的,但是我們需要關注的一個細節就是,碰到磚塊時,我們是需要考慮碰到磚塊的是哪個位置,上下和左右反彈的軌跡自然是不可能一樣的。

這里我們通過小球和磚塊的Y坐標進行判斷,究竟是碰到上下,還是左右。如何判斷呢?
因為目前的坐標是根據中心點確認的,所以我們通過兩者的Y坐標相減,得出的結果與磚塊的高度進行比較,如果大于磚塊高度的一半,那么小球碰到磚塊的上方,反之則是碰到右上方或左上方。
那么如何判斷下方、左下方和右下方呢?我們只需要把絕對值加上,就可以完美的解決這個問題。如何加呢?我們可以仔細研究下方的代碼。

然后小球該怎么進行反彈呢?

好了,走到這步,整個游戲看起來就基本運行起來了,可是里面還有很多的bug等著我們去解決呢!
end
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
