資訊內容
Scratch第四十四講:微信跳一跳(一)
想了解編程技巧,就請點擊上面藍字:跟我學Scratch編程,關注CC哥
?
最近幾天CC哥玩了一下微信跳一跳的游戲,覺得挺好玩,也想用scratch來做一個類似的,然后在網上找了一下,發現做得都跟微信原版不太一樣,所以CC哥盡量做得跟原版象一些。
做這個游戲CC哥在考慮有哪幾個難點:
1:首先這是個立體的游戲,跳棋是在一個立體平面內往屏幕深度走的,而不是我們平常做的跳一跳的游戲不是水平就是垂直在走。
2:一個個方塊造型不同,但是肯定用克隆做比較方便,而不能用不同的角色。
3:既然游戲是立體的界面,那么跳棋肯定是斜著方向跳的,而不是水平跳。
先看一下錄的游戲視頻

今天CC哥又解鎖了一個技能,就是做了個動態的片頭,Scratch不能顯示GIF的圖片,那怎么顯示GIF圖片呢?其實是個笨方法,我把一個GIF圖片用愛奇藝的播放器直接存成了一組圖片。然后把這一組圖片全部上傳到了Scratch里面,然后再循環切換造型罷了,效果還是挺好的。
看,就是這個工具(愛奇藝萬能播放器),上面那個紅圈圈住的按鈕,可以把gif圖片存成一個個的單圖。(如果有誰發現scratch可以直接上傳動圖,務必跟CC哥講一下哦)
這個GIF有86張圖,CC哥一個一個傳上去了。(Scratch也沒有批量上傳呀,誰知道也跟CC哥說一聲)
好了,講主要部分的程序:
該游戲的角色:
角色1是方塊,角色2是跳棋,角色3是剛才講的開場畫面,角色4是用來做跟蹤定位的。
先從方塊的部分講起:
這些造型是CC哥一個一個在微信跳一跳的游戲里扣出來的,效果還不錯吧。
這個方塊的程序思路是:
1:一開始跳棋站在方塊上面,然后方塊在原地克隆一個方塊,然后方塊沿著水平30的方向向斜上方隨機移動到一個位置。并變換造型。
2:等跳棋跳到方塊上之后,方塊在原地克隆一個新的方塊,然后再隨機向斜前方移動,如果移動的位置靠近右邊的邊界時,所有的方塊包括跳棋均反向移動到初始的位置。

在這里面因為涉及到角色的同步問題,跳棋跳到下一個方塊的位置時才產生下一個方塊,理論上這里面應該用消息來做傳遞最方便。但是CC哥發現當用消息進行同步時,程序出現了bug,可能是涉及到了克隆體同步的問題。CC哥也沒搞清楚問題出在哪里,所以沒有用消息進行同步,而用狀態變量來做同步了,這種方法在之前的講座中也用過。
這個下一跳就是狀態變量。一般的情況下這個變量為0,一旦這個變量被賦值為1的時候,就會引發“下一跳“的程序代碼執行。
這部分就是下一跳的代碼:
就是讓方塊在原地克隆后,并移動到一個新的位置。(隨機數的范圍限定了方塊不會太遠也不會太近)
有一個關鍵點就是要判斷下一個新的位置是不是在屏幕里能顯示,還是已經跳到了屏幕外,如果跳到了屏幕外,那么就需要把整個克隆體向后移動。那這個判斷怎么做呢?包括這個后退的距離有多遠呢?
第一個,新位置判斷用的新的x坐標的位置,就是當前方塊的x坐標,加上新的位置在x軸的方向移動的距離。
因為這個角度是30度,所以水平移動的距離等于下一步位置乘以0.866,也就是cos(30)啦。這個之前講過了。
后退的位置因為是要移動到最初的位置,那么移動多少步呢?我們可以很輕松算出來y軸跟最初的位置的距離,再乘以2就是沿著移動路徑要后退的位置了。因為sin(30)=0.5,所以算出y軸一共離開初始位置有多遠,再乘以2就可以了。
這段就是后撤的代碼,所有的克隆體都會收到消息后撤。
這段代碼是如果克隆體移動的位置太靠下時,把這個克隆體刪掉。(注意檢測的時候我沒有用如果碰到邊緣這個偵測命令,而是用y坐標來判斷位置,是因為角色是有尺寸的,而且比較大,所以即使碰到邊緣,你也并不是想要它消失,而是當角色多部分在邊緣以外才會需要它消失,所以我們會用y坐標來判斷是否刪除克隆體。)
跳棋的程序設計:
1:當按下空格鍵后,跳棋在積蓄能量,也就是要跳多高跳多遠。
2:當松開空格鍵之后,跳棋要向著下個方塊翻滾跳出。
3:如果跳到一定范圍內,跳棋就算跳躍成功,會自動移到方塊的中心,準備下一個跳躍。
4:如果沒有跳到下一個方塊的范圍內,那么游戲失敗。
v代表y軸的起跳速度,vx代表x軸的運動速度。用x和y變量來記錄當期坐標。循環用來通過按著空格鍵不放給v賦值。按的時間越長,v越大。
水平方向的速度為垂直方向的速度除以4,大家自己可以調。
跳到什么位置算跳躍終止呢?以前都是大家做的跳躍通常都是用碰到某種顏色或角色作為跳躍終止。而這里不行,因為是個斜方向跳躍,所以跳棋是沿著與水平角度成30度角的路徑跳。所以CC哥不斷來檢測跳棋的位置,一旦跳棋落到了這條路徑上,那么跳躍就結束。(用了直角三角形的兩條直角邊的比例關系來做個判斷。tan(30))這一點是個小難點,大家可以仔細想想。
循環中就是普通的跳躍程序,v的速度是隨著每次循環變化的。中間為了做翻滾,又加了個角色一定角度的旋轉。
跳躍結束后別忘了把角色的角度還原到90度。
另外不是檢測是否碰到方塊,而是檢測是否碰到ball,這個ball的角色就是用來做這個檢測的,因為方塊的角色比較大,而且是個立體圖形,我們希望只有跳棋碰到了方塊上面的一部分平面時才算跳到位置。
所以我們只要讓ball這個角色始終跟著方塊就行。如果想把效果做的更好,還可以用一個角色來替代跳棋來做碰撞檢測,因為跳棋也是立體的,我們希望只有跳棋的底部碰到ball才算跳到了位置。不過這里CC哥就留給大家自己去做了。
這段代碼是跳棋跟著方塊一起后退的代碼,注意旋轉方式要在后退時設置一下,否則跳棋就會在后退的時候歪掉。等后退完,重新把旋轉方式設定為任意旋轉,這樣在下一個跳躍時,跳棋可以翻滾。
這是按下跳棋時的跳棋的特效。
這是ball的程序,就是設定成透明,并且隨時跟著方塊就行。
其他部分的代碼CC哥就不介紹了。
下一講,CC哥再把這個游戲繼續完善一下,一方面是跳棋的特效,一方面是跳躍路徑的轉向該如何處理。
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
