iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0

上篇的布景觀念,可以設計出如下的樣貌

https://ithelp.ithome.com.tw/upload/images/20220926/20112674Okz356wtt2.png

一開始畫面呈現的球,離下面的板子有些許距離,是因為想要讓畫面呈現出,當開始鈕按下去後,球落下,隨著板子的左右移動,有個水平方向的移動(+x or -x)

也因此不難想到,會有兩個EventListener分別監聽開始鈕和鍵盤移動,但鍵盤的移動得發生在開始後

再來是球降落後,碰到板子向上回彈,若彈到牆壁或磚塊,也都要有回彈反射的功能;而球撞到上面的磚塊後要消失。這部分是這遊戲的核心,所以我拆開來介紹

1. 反射(回彈)

利用對稱圖形的概念,即可完成。如圖,當碰到邊界(或判斷出要回彈),改變水平或垂直的方向來達成。
https://ithelp.ithome.com.tw/upload/images/20220926/20112674CwaEai9oCw.png

2. 偵測撞到磚塊

若是要判斷兩矩形碰撞的話,固定從矩形的某個角落或中心去算出四邊的邊界後,再判斷x方向或y方向是否重疊,然而遊戲中要判斷的物體分別是圓形和趨近矩形的磚塊(先當矩形),嚴謹來看的話,會遇到不應該直接從水平或垂直方向看重疊,因為有可能落在傾斜方向,事實上並沒有碰撞到,如下圖的右上方情況。
https://ithelp.ithome.com.tw/upload/images/20220926/20112674G5Zq00HbPT.png

但是!但是!但是!當方框落在圓弧外到虛線範圍內時,其實也等同於一定會撞上去,只差在時間的問題,原因是球在飛行過程中,不會有其他外力來影響其方向,所以時間切的洽當的話,那一點點誤差無傷大雅。
至於洽當的時間為多少,這邊我還沒有測試過,但以人眼視覺暫留時間 0.1秒來看的話,球的速度不能大於這個值,否則會有一個一個球的殘影在畫面中,沒有平順的感覺;但如果再小於這個值太多的話,就會太過敏銳地去偵測到明明還有一大空間的虛線誤差範圍,卻判斷碰撞,所以預期之後會先測試0.1秒砍半,使用0.05秒實作看結果。

最後就是結束的時機點,當方塊全部消掉或是球落在底部非板子上遊戲即中止。

參考資料

視覺暫留時間


上一篇
打磚塊(block) - 布景
下一篇
JavaScript canvas 載入圖片
系列文
那些八年級生的經典迷你遊戲,前端JS自學之路20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言