我是會做遊戲也會教你做遊戲的小螞蟻,歡迎關注我,每天學點兒做遊戲的知識。
嗨!大家好,我是小螞蟻。
今天,我們來繼續學習和實現下一個模塊:玩家控制形狀。
在俄羅斯方塊遊戲中,玩家可以對下落的形狀進行控制,控制分為兩種,一種是控制形狀的移動(左,右,下),一種是控制形狀的旋轉(順時針旋轉 90 度)。
控制形狀的移動我們先來看一下如何控制移動。
如圖是一個“T”型的形狀,它在網格中是可以向左,右,下,三個方向移動的。除此之外,它的移動還是有規則的,即每次隻能移動一個格子的位置。
有了這樣的規則,其實是讓移動變得更簡單了。往哪個方向上移動,就将形狀向哪個方向平移一個單元格的位置即可。
移動是有限制的,即形狀隻能在指定的區域内(20 行 10 列的網格)進行移動,所以,我們在處理移動的時候需要考慮邊界限制。
如圖,以第一個形狀為例,它一共有 4 種不同的狀态,圖中紅色的圓點表示的形狀在當前網格中的位置,可以看的出,“狀态1”和“狀态2”在判斷是否達到右邊界時,使用的判斷距離是不同的。“狀态1”距離右邊界一個半方塊,“狀态2”距離右邊界一個方塊。
因此,在進行邊界判斷的時候,我們必須根據當前形狀所在的狀态進行判斷。仔細觀察一下上方圖中的這 4 種狀态,其實是可以分為兩組的,“狀态1”和“狀态3”屬于一組,“狀态2”和“狀态4”屬于一組。
接着來看一下,向右移動的積木邏輯。
根據當前形狀的狀态,判斷是否達到了右邊界,如果沒有到達右邊界的話,就向右移動一個位置。
向左移動也是同樣的方法,這裡我們就不再贅述了。至于向下移動的處理,我們把它放到後續的碰撞檢測模塊再進行詳細講解。
控制形狀的旋轉接着我們來看一下如何控制旋轉,也可以叫做切換形狀的狀态。
如圖,是“形狀1”的所有狀态,每一種狀态都是以上一個狀态為基礎,順時針旋轉 90 度。“狀态4”再轉 90 度,就又回到了“狀态1”,狀态的切換是一個循環的過程。
找到這個規律之後,實現起來就很簡單了,每當進行狀态切換時,就将當前形狀順時針旋轉 90 度即可。
但是,似乎沒有想象的那麼簡單。
如圖,是“狀态1”切換到“狀态2”的過程,形狀在進行旋轉時,會以中間的那個紅色圓點進行轉動,當轉到 90 度切換到“狀态2”時,我們發現,當前的形狀并沒有位于網格之上。此時,就需要對當前的形狀進行位置調整,讓它的每一個方塊都落在單元格中。
如圖,向左移動半個格子,向下移動半個格子,便可将“狀态2”的圖形移動到網格中。
同樣當“狀态2”切換到“狀态3”的時候,也同樣會出現這種偏移問題,我們隻需要在把這種轉換過程畫出來,就可以看出偏移,以及調整的方向和大小。
與移動處理一樣,狀态旋轉時,我們也要考慮到左右邊界。
如圖,在網格中“狀态2”切換到“狀态3”的過程是這樣的,先旋轉 90 度,然後再向右上方進行偏移。
但是,當“狀态2”位于右邊界時,如果還向右上方偏移調整的話,就會導緻形狀越出邊界。
這時,形狀的調整位置就需要變動,改為向左上方進行偏移。
所以,“狀态2”切換到“狀态3”時,需要考慮到右邊界的情況,如果不在右邊界,則旋轉後向右上方調整,如果在右邊界,則旋轉後向左上方調整。同樣的,當“狀态4”切換到“狀态1”時,也要考慮到左邊界的情況。
最後,我們來看一下整個狀态切換的積木邏輯。
預覽一下遊戲,看一下移動和旋轉控制。
今天的内容就到這裡了,稍微總結一下:在俄羅斯方塊中玩家對于形狀的控制有兩種,一種是移動控制,一種是旋轉(切換)控制。在這兩種控制中,我們都需要考慮左右邊界的處理,而且針對不同的狀态,所需要做的邊界處理也不同。
另外,你可能發現了,我在遊戲中繪制了一個 20 x 10 的網格。這個網格不會在最終的遊戲中出現,但是在遊戲制作的過程中,卻會給我們很大的幫助。有了這樣的一張網格,你就能夠在遊戲中實時地觀察到自己對于形狀的處理是否正确了。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!