国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現(xiàn)在的位置是:首頁(yè) » scratch編程資訊

資訊內(nèi)容

Scratch第四十九講:完美的下落和反彈

極客小將2021-02-02-
做了很多小游戲,都會(huì)遇到碰撞和反彈的情況,CC哥大多時(shí)候也都是簡(jiǎn)單處理一下,包括之前的講座也有提過(guò),但是沒(méi)有認(rèn)真的講解過(guò)。今天就專(zhuān)門(mén)為這個(gè)主題做一講,把這部分內(nèi)容徹底講透,大家可以一起探討一下。 是不是覺(jué)得很簡(jiǎn)單,就是一個(gè)小球落到地上再?gòu)椘饋?lái),但是讓我們一起來(lái)過(guò)過(guò)這

做了很多小游戲,都會(huì)遇到碰撞和反彈的情況,CC哥大多時(shí)候也都是簡(jiǎn)單處理一下,包括之前的講座也有提過(guò),但是沒(méi)有認(rèn)真的講解過(guò)。今天就專(zhuān)門(mén)為這個(gè)主題做一講,把這部分內(nèi)容徹底講透,大家可以一起探討一下。

是不是覺(jué)得很簡(jiǎn)單,就是一個(gè)小球落到地上再?gòu)椘饋?lái),但是讓我們一起來(lái)過(guò)過(guò)這個(gè)下落反彈里面有多少坑。

1:勻速下墜

先來(lái)看下落,一個(gè)最簡(jiǎn)單的下落程序是這樣的:

upload/article/images/2021-02-02/0a68e36173f51696f528b40cf991e143.jpg

https://cdn.china-scratch.com/timg/190526/09425453Y-1.gif

小球勻速下落,碰到黑線停下來(lái)。這肯定不完美,因?yàn)橄聣嫅?yīng)該是加速度的,而不是勻速的。v=at,這是加速度公式。所以下墜的每一步都隨著時(shí)間的增加,下墜的距離在增大。

2:下墜配上加速度。

這個(gè)也不復(fù)雜,讓每一次循環(huán)的時(shí)候都將下落速度增加一點(diǎn),這樣就有加速度的效果了。

upload/article/images/2021-02-02/098eaf0558bc2a205b4e9970ad23c0f9.jpg

upload/article/images/2021-02-02/5b3c31c6f963434a6751efed2771fcad.jpg

加速度的效果有了,但是大家發(fā)現(xiàn)問(wèn)題沒(méi)?小球碰到黑線并沒(méi)有停下來(lái),而是會(huì)一部分穿過(guò)黑線才能停下來(lái)。也就是說(shuō)小球碰到黑線時(shí)并沒(méi)有完全停下來(lái)。這是怎么發(fā)生的呢?

因?yàn)樾∏蛳陆档拿恳徊阶叩木嚯x就會(huì)變大,我們仔細(xì)讀程序,也就是小球碰到黑線的前一步和碰到黑線的后一步之間,行進(jìn)的步數(shù)已經(jīng)比較大了,已經(jīng)超過(guò)了小球最后和黑線的距離。所以在碰到黑線時(shí),實(shí)際上已經(jīng)一部分越過(guò)了黑線。那如何解決這個(gè)問(wèn)題呢?

3:碰到黑線剛好停住。

如果解決這個(gè)問(wèn)題,解決的方法就是讓小球再退回到黑線的上方。我們這時(shí)候并不知道小球應(yīng)該退后多少步,所以只能一步步試,直到小球和黑線分離。

我們加了一段程序,如果小球碰到了黑色那么就執(zhí)行一個(gè)循環(huán),讓小球回到黑線上方。

upload/article/images/2021-02-02/26139e014992593edfa61a04ffe59be6.jpg

https://cdn.china-scratch.com/timg/190526/094255L38-5.gif

奇怪不?小球在向上后退離開(kāi)黑線后為什么又掉了下來(lái),然后在黑線上反復(fù)震動(dòng)?其實(shí)在做碰撞處理的時(shí)候這是經(jīng)常會(huì)出的一個(gè)bug。

我們仔細(xì)讀程序,就會(huì)發(fā)現(xiàn),在這個(gè)循環(huán)里的判斷邏輯是這樣,如果沒(méi)有碰到黑線,就往下落。每一步下落的距離就是“下落速度”這個(gè)變量的值。如果碰到黑線,就往上后退,直到離開(kāi)黑線。那大家有沒(méi)有發(fā)現(xiàn),這個(gè)邏輯其實(shí)就是個(gè)死循環(huán)。小球永遠(yuǎn)不可能停下來(lái)。

我們修改一下程序,重新把邏輯判斷的位置調(diào)整一下,同時(shí)再加上一條關(guān)鍵語(yǔ)句。

upload/article/images/2021-02-02/0a40e6d78c39de7c3238bd09b2fa27c0.jpg

upload/article/images/2021-02-02/55e7b1dde1f4c719e877f4ada2ffcb71.jpg

邏輯判斷調(diào)整成,在每一步下落時(shí)都判斷是否碰到黑線,如果碰到黑線后就后退,后退完畢后又增加了一條語(yǔ)句,讓小球再下降一步,保證小球和黑線接觸上。小球再下降一步就是一個(gè)關(guān)鍵語(yǔ)句。然后大循環(huán)就終止了。大家再好好理解一下。

但是大家發(fā)現(xiàn)沒(méi)有,這樣效果還是不好,小球在返回黑線上方有個(gè)過(guò)程,我們已經(jīng)沒(méi)有加等待命令了,這已經(jīng)是最快的方式了。但是這個(gè)過(guò)程還是讓人不舒服。(有人在返回黑線上方的操作做的更復(fù)雜些,比如一次退回更多步數(shù),比如一次退10步,如果退過(guò)了,再返回5步,這種反復(fù)趨近的操作也是一種辦法。但是程序復(fù)雜不說(shuō),效果也不好)那如何解決這個(gè)問(wèn)題呢?

這里教大家一種方法,用自定義命令的方式。把后退的操作用一個(gè)單獨(dú)的自定義命令來(lái)做。

upload/article/images/2021-02-02/e0c1ec90bf6ddf01b30624ab11e296b8.jpg

upload/article/images/2021-02-02/6febf27ea309511bef26983fed6f4512.jpg

猛一看,這段程序跟剛才沒(méi)什么區(qū)別呀?其實(shí)區(qū)別是有的,之所以大家看到小球向上回退的過(guò)程,是因?yàn)槌绦蛴兴⑿碌倪^(guò)程,每一步都需要刷新屏幕。而把這段程序放到自定義的語(yǔ)句,就可以解決這個(gè)問(wèn)題。因?yàn)樾碌姆e木屬性里面有一個(gè) 選項(xiàng):運(yùn)行時(shí)不刷新屏幕。只要勾選了這個(gè)選項(xiàng),那么這段程序每一步執(zhí)行的時(shí)候就不會(huì)刷新屏幕。大家看看效果。

upload/article/images/2021-02-02/3513f58ed4c995c976aa465c81caefd8.jpg

upload/article/images/2021-02-02/9827196818468fafaf0b43617701ec58.jpg

看,通過(guò)這種方法就完美解決了吧。

4:下墜加反彈

這段代碼不復(fù)雜,反彈操作發(fā)生在當(dāng)球碰到了黑線停止不動(dòng)后,然后以之前的速度進(jìn)行向上走的過(guò)程,走的過(guò)程,速度不斷減小到零。為了讓代碼看著簡(jiǎn)單清晰,我們又用了自定義語(yǔ)句的做法。單獨(dú)做了個(gè)反彈的語(yǔ)句命令。

upload/article/images/2021-02-02/a738960a2ccbd160010b03f9634ae2cb.jpg

upload/article/images/2021-02-02/370735370fb2d394a16ccfc004dafa63.jpg

upload/article/images/2021-02-02/14a3f422ce98ee6841b4255661eafcfe.jpg

5:下墜反彈,反彈幅度不斷減小直到靜止在黑線上。

這個(gè)效果不復(fù)雜,只需要每次反彈的時(shí)候減少反彈的初始速度就行。讓我們把這條語(yǔ)句加上。

upload/article/images/2021-02-02/d877f459a5aeb45d639250e6a8488563.jpg

https://cdn.china-scratch.com/timg/190526/09425K317-16.gif

奇怪了,球最后靜止之后,竟然沒(méi)有停下來(lái),反而飛到天上去了。這是什么bug呢?這是因?yàn)樵谧詈螽?dāng)反彈速度為零的時(shí)候,已經(jīng)應(yīng)該靜止下來(lái)的時(shí)候,由于沒(méi)有做判斷控制,反彈速度的數(shù)值繼續(xù)增加已經(jīng)由負(fù)值轉(zhuǎn)為正值,不再是向下降落,而是向上飛了。所以球就直接向上加速飛去了。所以我們要加個(gè)判斷,當(dāng)反彈的初始速度為零時(shí),反彈要停止下來(lái)。

upload/article/images/2021-02-02/169d2b4d549329b47840f9b4a1413a23.jpg

https://cdn.china-scratch.com/timg/190526/09425L348-18.gif

這個(gè)下落和反彈目前看起來(lái)挺完美了。

6:用空格鍵做個(gè)起跳的過(guò)程。

最后一步就是把這個(gè)程序做成剛開(kāi)始視頻的樣子,需要增加一個(gè)用空格鍵來(lái)控制小球起跳的過(guò)程。

upload/article/images/2021-02-02/90b1995f95b7a5a03ea4a43f54cb47fa.jpg

看起來(lái)很簡(jiǎn)單,通常我們也會(huì)這么做,但是實(shí)際執(zhí)行效果呢?我們看一下:

https://cdn.china-scratch.com/timg/190526/09425VR4-20.gif

關(guān)于按空格鍵,我們之前就有過(guò)一講,主要是按鍵這個(gè)過(guò)程這么簡(jiǎn)單處理有兩個(gè)問(wèn)題:

1:按鍵的過(guò)程有時(shí)延,有的人按的快,有的人按的慢,所以可能你按了一下,由于按的慢,程序當(dāng)成你按了幾下。

2:球在跳躍的過(guò)程中,你按了空格鍵,球就在半空中進(jìn)入了起跳的過(guò)程。

要解決這個(gè)問(wèn)題就要加狀態(tài)變量了,只有在球已經(jīng)靜止在黑線上時(shí),才準(zhǔn)許用空格鍵起跳。

https://cdn.china-scratch.com/timg/190526/09425V305-21.jpg

下面我把這個(gè)程序全部貼出來(lái)。大家可以試著做一下。

https://cdn.china-scratch.com/timg/190526/09425U237-22.jpg

我們做程序有時(shí)候就像畫(huà)一幅畫(huà)一樣,如果有畫(huà)的不好的地方,你總會(huì)時(shí)不時(shí)想起來(lái),總想把它畫(huà)好。做程序也一樣,只有你對(duì)自己的程序很滿意了,你才會(huì)覺(jué)得非常開(kāi)心。

聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過(guò)郵件及時(shí)和我們聯(lián)系刪除

預(yù)約試聽(tīng)課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

主站蜘蛛池模板: 亳州市| 汪清县| 山丹县| 龙南县| 耒阳市| 益阳市| 聂荣县| 古丈县| 东乡族自治县| 龙州县| 瓮安县| 休宁县| 大邑县| 天台县| 安塞县| 西城区| 余姚市| 钦州市| 长汀县| 嘉兴市| 铁岭县| 姚安县| 科技| 阿克苏市| 梅河口市| 保山市| 当阳市| 大庆市| 比如县| 武安市| 汉源县| 杭州市| 南华县| 巴楚县| 巩义市| 安宁市| 濮阳县| 内江市| 南江县| 津市市| 南漳县|