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

極客小將

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

資訊內(nèi)容

Scratch第四十四講:微信跳一跳(一)

極客小將2021-02-16-
想了解編程技巧,就請點(diǎn)擊上面藍(lán)字:跟我學(xué)Scratch編程,關(guān)注CC哥 ? 最近幾天CC哥玩了一下微信跳一跳的游戲,覺得挺好玩,也想用scratch來做一個(gè)類似的,然后在網(wǎng)上找了一下,發(fā)現(xiàn)做得都跟微信原版不太一樣,所以CC哥盡量做得跟原版象一些。

想了解編程技巧,就請點(diǎn)擊上面藍(lán)字:跟我學(xué)Scratch編程,關(guān)注CC哥


?

最近幾天CC哥玩了一下微信跳一跳的游戲,覺得挺好玩,也想用scratch來做一個(gè)類似的,然后在網(wǎng)上找了一下,發(fā)現(xiàn)做得都跟微信原版不太一樣,所以CC哥盡量做得跟原版象一些。

做這個(gè)游戲CC哥在考慮有哪幾個(gè)難點(diǎn):

1:首先這是個(gè)立體的游戲,跳棋是在一個(gè)立體平面內(nèi)往屏幕深度走的,而不是我們平常做的跳一跳的游戲不是水平就是垂直在走。

2:一個(gè)個(gè)方塊造型不同,但是肯定用克隆做比較方便,而不能用不同的角色。

3:既然游戲是立體的界面,那么跳棋肯定是斜著方向跳的,而不是水平跳。

先看一下錄的游戲視頻

upload/article/images/2021-02-16/9c22e2f591481dc9538016adde956c1a.jpg

今天CC哥又解鎖了一個(gè)技能,就是做了個(gè)動(dòng)態(tài)的片頭,Scratch不能顯示GIF的圖片,那怎么顯示GIF圖片呢?其實(shí)是個(gè)笨方法,我把一個(gè)GIF圖片用愛奇藝的播放器直接存成了一組圖片。然后把這一組圖片全部上傳到了Scratch里面,然后再循環(huán)切換造型罷了,效果還是挺好的。

upload/article/images/2021-02-16/c9e91a0735215bee9031c8f23c71e508.jpg

看,就是這個(gè)工具(愛奇藝萬能播放器),上面那個(gè)紅圈圈住的按鈕,可以把gif圖片存成一個(gè)個(gè)的單圖。(如果有誰發(fā)現(xiàn)scratch可以直接上傳動(dòng)圖,務(wù)必跟CC哥講一下哦)

這個(gè)GIF有86張圖,CC哥一個(gè)一個(gè)傳上去了。(Scratch也沒有批量上傳呀,誰知道也跟CC哥說一聲https://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2021-02-16/e03c091b9dad83d4dc7c63bfd17455be.jpg

upload/article/images/2021-02-16/0e0014cbf07e95fbe89a3979820e03e7.jpg

好了,講主要部分的程序:

該游戲的角色:

upload/article/images/2021-02-16/294243f103deab664c7ce7605d2140e4.jpg

角色1是方塊,角色2是跳棋,角色3是剛才講的開場畫面,角色4是用來做跟蹤定位的。

先從方塊的部分講起:

upload/article/images/2021-02-16/765b5d47740f719337d9bfb174a05e77.jpg

這些造型是CC哥一個(gè)一個(gè)在微信跳一跳的游戲里扣出來的,效果還不錯(cuò)吧。

upload/article/images/2021-02-16/49db46b40fdea010982c74edd5879c7e.jpg

這個(gè)方塊的程序思路是:

1:一開始跳棋站在方塊上面,然后方塊在原地克隆一個(gè)方塊,然后方塊沿著水平30的方向向斜上方隨機(jī)移動(dòng)到一個(gè)位置。并變換造型。

2:等跳棋跳到方塊上之后,方塊在原地克隆一個(gè)新的方塊,然后再隨機(jī)向斜前方移動(dòng),如果移動(dòng)的位置靠近右邊的邊界時(shí),所有的方塊包括跳棋均反向移動(dòng)到初始的位置。

upload/article/images/2021-02-16/9c22e2f591481dc9538016adde956c1a.jpg

在這里面因?yàn)樯婕暗浇巧耐絾栴},跳棋跳到下一個(gè)方塊的位置時(shí)才產(chǎn)生下一個(gè)方塊,理論上這里面應(yīng)該用消息來做傳遞最方便。但是CC哥發(fā)現(xiàn)當(dāng)用消息進(jìn)行同步時(shí),程序出現(xiàn)了bug,可能是涉及到了克隆體同步的問題。CC哥也沒搞清楚問題出在哪里,所以沒有用消息進(jìn)行同步,而用狀態(tài)變量來做同步了,這種方法在之前的講座中也用過。

upload/article/images/2021-02-16/f5dc95b295756be76dd164b2a7972081.jpg

這個(gè)下一跳就是狀態(tài)變量。一般的情況下這個(gè)變量為0,一旦這個(gè)變量被賦值為1的時(shí)候,就會(huì)引發(fā)“下一跳“的程序代碼執(zhí)行。

這部分就是下一跳的代碼:

就是讓方塊在原地克隆后,并移動(dòng)到一個(gè)新的位置。(隨機(jī)數(shù)的范圍限定了方塊不會(huì)太遠(yuǎn)也不會(huì)太近)

有一個(gè)關(guān)鍵點(diǎn)就是要判斷下一個(gè)新的位置是不是在屏幕里能顯示,還是已經(jīng)跳到了屏幕外,如果跳到了屏幕外,那么就需要把整個(gè)克隆體向后移動(dòng)。那這個(gè)判斷怎么做呢?包括這個(gè)后退的距離有多遠(yuǎn)呢?

upload/article/images/2021-02-16/f528704b7cf2cf5a485de8cd270518c8.jpg

第一個(gè),新位置判斷用的新的x坐標(biāo)的位置,就是當(dāng)前方塊的x坐標(biāo),加上新的位置在x軸的方向移動(dòng)的距離。

upload/article/images/2021-02-16/e5d55b4bea13168c06ae82f0cf5dfd6e.jpg

upload/article/images/2021-02-16/bc2baa184c19d9457314e9e529ab7ed4.jpg

因?yàn)檫@個(gè)角度是30度,所以水平移動(dòng)的距離等于下一步位置乘以0.866,也就是cos(30)啦。這個(gè)之前講過了。

后退的位置因?yàn)槭且苿?dòng)到最初的位置,那么移動(dòng)多少步呢?我們可以很輕松算出來y軸跟最初的位置的距離,再乘以2就是沿著移動(dòng)路徑要后退的位置了。因?yàn)閟in(30)=0.5,所以算出y軸一共離開初始位置有多遠(yuǎn),再乘以2就可以了。

upload/article/images/2021-02-16/ad8111d7b949b099d34f92032300dec0.jpg

這段就是后撤的代碼,所有的克隆體都會(huì)收到消息后撤。

upload/article/images/2021-02-16/f677cc0211f8625d8be778331380921a.jpg

這段代碼是如果克隆體移動(dòng)的位置太靠下時(shí),把這個(gè)克隆體刪掉。(注意檢測的時(shí)候我沒有用如果碰到邊緣這個(gè)偵測命令,而是用y坐標(biāo)來判斷位置,是因?yàn)榻巧怯谐叽绲模冶容^大,所以即使碰到邊緣,你也并不是想要它消失,而是當(dāng)角色多部分在邊緣以外才會(huì)需要它消失,所以我們會(huì)用y坐標(biāo)來判斷是否刪除克隆體。)

跳棋的程序設(shè)計(jì):

1:當(dāng)按下空格鍵后,跳棋在積蓄能量,也就是要跳多高跳多遠(yuǎn)。

2:當(dāng)松開空格鍵之后,跳棋要向著下個(gè)方塊翻滾跳出。

3:如果跳到一定范圍內(nèi),跳棋就算跳躍成功,會(huì)自動(dòng)移到方塊的中心,準(zhǔn)備下一個(gè)跳躍。

4:如果沒有跳到下一個(gè)方塊的范圍內(nèi),那么游戲失敗。

upload/article/images/2021-02-16/4b941619796b81df085cda5502679e8c.jpg

upload/article/images/2021-02-16/f546ac7774dfe1bfb5b001490655a640.jpg

v代表y軸的起跳速度,vx代表x軸的運(yùn)動(dòng)速度。用x和y變量來記錄當(dāng)期坐標(biāo)。循環(huán)用來通過按著空格鍵不放給v賦值。按的時(shí)間越長,v越大。

upload/article/images/2021-02-16/6bfb06adb8a7cb928a648fcae407e314.jpg

水平方向的速度為垂直方向的速度除以4,大家自己可以調(diào)。

跳到什么位置算跳躍終止呢?以前都是大家做的跳躍通常都是用碰到某種顏色或角色作為跳躍終止。而這里不行,因?yàn)槭莻€(gè)斜方向跳躍,所以跳棋是沿著與水平角度成30度角的路徑跳。所以CC哥不斷來檢測跳棋的位置,一旦跳棋落到了這條路徑上,那么跳躍就結(jié)束。(用了直角三角形的兩條直角邊的比例關(guān)系來做個(gè)判斷。tan(30))這一點(diǎn)是個(gè)小難點(diǎn),大家可以仔細(xì)想想。

循環(huán)中就是普通的跳躍程序,v的速度是隨著每次循環(huán)變化的。中間為了做翻滾,又加了個(gè)角色一定角度的旋轉(zhuǎn)。

upload/article/images/2021-02-16/80d92350c1b37b8dc0bc0fef9c364608.jpg

跳躍結(jié)束后別忘了把角色的角度還原到90度。

另外不是檢測是否碰到方塊,而是檢測是否碰到ball,這個(gè)ball的角色就是用來做這個(gè)檢測的,因?yàn)榉綁K的角色比較大,而且是個(gè)立體圖形,我們希望只有跳棋碰到了方塊上面的一部分平面時(shí)才算跳到位置。

upload/article/images/2021-02-16/0a8cfcf02094b16606a6664138cc11fe.jpg

所以我們只要讓ball這個(gè)角色始終跟著方塊就行。如果想把效果做的更好,還可以用一個(gè)角色來替代跳棋來做碰撞檢測,因?yàn)樘逡彩橇Ⅲw的,我們希望只有跳棋的底部碰到ball才算跳到了位置。不過這里CC哥就留給大家自己去做了。

upload/article/images/2021-02-16/964b74d0bb96d205c278d4c4f46f17a7.jpg

這段代碼是跳棋跟著方塊一起后退的代碼,注意旋轉(zhuǎn)方式要在后退時(shí)設(shè)置一下,否則跳棋就會(huì)在后退的時(shí)候歪掉。等后退完,重新把旋轉(zhuǎn)方式設(shè)定為任意旋轉(zhuǎn),這樣在下一個(gè)跳躍時(shí),跳棋可以翻滾。

https://cdn.china-scratch.com/timg/190401/1A2193E8-21.jpg

這是按下跳棋時(shí)的跳棋的特效。

這是ball的程序,就是設(shè)定成透明,并且隨時(shí)跟著方塊就行。

https://cdn.china-scratch.com/timg/190401/1A2202251-22.jpg

其他部分的代碼CC哥就不介紹了。

下一講,CC哥再把這個(gè)游戲繼續(xù)完善一下,一方面是跳棋的特效,一方面是跳躍路徑的轉(zhuǎn)向該如何處理。

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

預(yù)約試聽課

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

主站蜘蛛池模板: 昔阳县| 富川| 毕节市| 洞口县| 文登市| 巴东县| 德令哈市| 岳阳县| 兴国县| 安溪县| 永吉县| 方城县| 石狮市| 连江县| 华安县| 大化| 庐江县| 岚皋县| 安庆市| 天全县| 洛浦县| 茶陵县| 蒙自县| 房山区| 秭归县| 纳雍县| 区。| 子洲县| 特克斯县| 湾仔区| 呈贡县| 西城区| 车险| 元谋县| 富顺县| 金华市| 建瓯市| 深州市| 增城市| 鸡西市| 竹山县|