資訊內(nèi)容
Scratch第四十七講:臺球(多一個臺球)
想了解編程技巧,就請點擊上面藍(lán)字:跟我學(xué)Scratch編程,關(guān)注CC哥
首先祝大家五一節(jié)快樂哦,想必大家都出去玩了,CC哥在家繼續(xù)給大家講Scratch。
今天還繼續(xù)講臺球,臺球這個游戲其實CC哥想了很久的,這個游戲說簡單了其實就是一個碰撞,但是如果我們上網(wǎng)看看,通常沒什么用scratch做的比較好的臺球游戲,為什么呢?因為復(fù)雜。大家大多數(shù)看的都是一個球的臺球游戲,很少見到兩個球,為什么呢?因為球和球之間會碰撞。一旦碰撞就會發(fā)生路徑的變化,在一個球臺里如果有多個球,那么相互之間的碰撞就會變得非常復(fù)雜。你怎么處理呢?想想就會頭疼。今天CC哥就來嘗試在臺球桌上放兩個球。游戲還是在上一講的基礎(chǔ)來做。
這個臺球有意思沒有,CC哥為了把球打進(jìn)洞,自己還練習(xí)了挺長時間,還真是有點不容易。
下面講講這個程序,這個程序在球臺上增加了一個球,游戲的目的是用白球擊打這個藍(lán)球,把球打進(jìn)洞。
程序的難點是,當(dāng)白球擊打到藍(lán)球的時候,這兩個球的運動軌跡會發(fā)生什么變化。如果想讓運動軌跡符合實際,那么就要用點物理的知識了。如果白球正好擊打到藍(lán)球的球心,那么白球的動能應(yīng)該全部傳遞給藍(lán)球,而白球就要靜止下來。如果白球沒有打到球心,那么藍(lán)色的球和白色的球會分別彈向不同的方向,并且各自的速度也不一樣。那怎么計算呢?
看一下這個圖,當(dāng)下面的球撞到上面的球的時候,會有這四個關(guān)系:
? ?上面的球會往v2的方向走,下面的球會往v1的方向走;
????v1和v2的角度是垂直的;
????v2的方向是沿著兩個球心的連線;
????v12+v22=v2
有了這個撞擊的規(guī)則,大家知道兩個球碰撞的程序怎么設(shè)計了嗎?

注意,這里只是一個球撞擊另一個靜止的球的做法,所以我們今天做的程序只是設(shè)計了白球去撞擊靜止的藍(lán)球,如果撞擊之后兩個球都在運動中發(fā)生的碰撞,CC哥今天沒做。大家也可以看看如果兩個球同在運動中的時候,如果發(fā)生碰撞,路徑和速度的算法應(yīng)該如何。
程序講解
首先增加了一個角色,就是藍(lán)球,ball2。
這個藍(lán)球的程序CC哥就是用角色的運動來處理了,而不是再象白球那樣用畫筆來畫了。也是為了處理簡便。白球的程序基本沒變,大家可以參考上一講。
今天重點講的是藍(lán)球的程序。
這段程序有幾個部分:
1:檢測顏色來檢測是否發(fā)生兩球的撞擊。
2:如果發(fā)生碰撞就先檢測藍(lán)球在碰撞后的方向。
當(dāng)兩個球發(fā)生碰撞時,先讓藍(lán)球面對白球,這時候就是藍(lán)球面對白球的球心。那么藍(lán)球下一步要彈開的方向,就是兩個球心連線相反的方向。同時用faceballangle記錄下來藍(lán)球下一步要走的方向。
3:算出藍(lán)球和白球彈開的初始速度。
這個可以用剛才講的原理來算出來。
藍(lán)球的速度speed2=白球的速度Dist * cos(白球原始方向與兩個球心連線之間的夾角)
白球的速度dist=白球的速度disi * sin(白球原始方向與兩個球心連線之間的夾角)
4:算出白球的方向。
這個要做一個判斷,要看白球是偏左撞擊,還是偏右側(cè)撞擊,如果偏左側(cè),那么白球會往左彈,如果偏右側(cè),那么白球會向右彈。取決于白球原先行進(jìn)方向的角度,和藍(lán)球下一步要彈開的方向角度之間的相互關(guān)系。白球彈開的方向是和藍(lán)球運動方向垂直的。
5:藍(lán)球的運動軌跡
白球有白球的運動程序,所以只要確定了撞擊之后的速度,和方向,那么運動的部分就不用做了,因為上一個程序已經(jīng)做了。這里就只需要做藍(lán)球的運動軌跡程序就行了。
speed2是藍(lán)球的初始速度,每步減少0.05,代表了速度越來越慢,之所以寫0.05,是跟白球的運動同步,讓大家在減速的步調(diào)是一致的。
藍(lán)球在撞到邊框一樣會發(fā)生反彈。這里跟白球一樣,我做了一個自定義的積木,用來處理藍(lán)球跟邊框碰著后所發(fā)生的方向改變。
6:藍(lán)球碰到邊框的程序
這個部分跟上一個白球的碰撞檢測差不多,這里就不重復(fù)講了。碰到邊上之后的移動speed2步的命令,其實是讓藍(lán)球離開四個臺邊。
球進(jìn)洞的程序:
球是要打到洞里的,那么我們看看藍(lán)球進(jìn)洞是什么程序控制。
這個進(jìn)洞檢測跟白球的進(jìn)洞檢測是一樣的。進(jìn)洞的效果就是消失后在球臺的正中間再次出現(xiàn)。這里就不講了。
今天的講解沒有做太多內(nèi)容,重點就是兩個球碰撞之后的速度和方向的計算方法。大家掌握了這個技巧,以后做碰撞的游戲肯定會生動很多。
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時和我們聯(lián)系刪除
