天天看點

瘋狂ios講義瘋狂連載之實作遊戲邏輯(2)

13.6.5 定義擷取通道的工具方法

這裡所謂的通道指的是一個方塊上、下、左、右4個方向上的空白方塊圖13.10顯示了一個方塊四周的通道。

瘋狂ios講義瘋狂連載之實作遊戲邏輯(2)

圖13.10 方塊四周的通道

下面是擷取某個坐标點四周通道的4個方法。

程式清單codes/13/Link/Link/sources/board/FKGameService.m

13.6.6 沒有轉折點的橫向連接配接

如果兩個FKPiece在FKPiece二維數組中的第二維索引值相等那麼這兩個FKPiece就位于同一行如前面的linkWithBeginPiece:endPiece:方法中①号代碼所示此時程式需要調用isXBlockFromP1: toP2:pieceWidth:判斷p1、p2之間是否有障礙。下面是該方法的代碼。

<a href="http://s3.51cto.com/wyfs02/M02/12/61/wKioL1MFZvaxbfzNAAIqxHENaAY269.jpg" target="_blank"></a>

從上面的判斷可以看出如果兩個方塊位于同一行且它們之間沒有障礙那麼這兩個方塊就可以消除兩個方塊的連接配接資訊就是它們的中心。

13.6.7 沒有轉折點的縱向連接配接

與之相似的是如果兩個FKPiece在FKPiece二維數組中的第一維索引值相等那麼這兩個FKPiece就位于同一列如前面的linkWithBeginPiece:endPiece:方法中②号代碼所示此時程式需要調用isYBlockFromP1: toP2:pieceHeight:方法判斷p1、p2之間是否有障礙。下面是該方法的代碼。

13.6.8 一個轉折點的連接配接

對于兩個方塊的連接配接線上隻有一個轉折點的情況程式需要先找到這個轉折點。為了找到這個轉折點程式定義周遊兩個通道并擷取它們交點的一個方法。

<a href="http://s3.51cto.com/wyfs02/M02/12/61/wKioL1MFZlfiF-uQAAPNUHG6n3M698.jpg" target="_blank"></a>

為了找出兩個方塊連接配接線上的連接配接點程式同樣需要分析p1、p2兩個點的位置分布。根據前面的分析我們知道p2要麼位于p1的右上角要麼位于p1的右下角。

注意

對于p2位于p1的左上角和左下角的情況隻要把p1、p2交換即可。

對于p2位于p1的右上角的情形如圖13.11所示。

從圖13.11可以看出當p2位于p1的右上角時應該計算p1的左通道與p2的向下通道是否有交點p1的向上通道與p2的向左通道是否有交點。

對于p2位于p1的右下角的情形如圖13.12所示。

從圖13.12可以看出當p2位于p1的右上角時應該計算p1的向右通道與p2的向上通道是否有交點p1的向下通道與p2的向左通道是否有交點。

瘋狂ios講義瘋狂連載之實作遊戲邏輯(2)

圖13.11p2位于p1的右上角

瘋狂ios講義瘋狂連載之實作遊戲邏輯(2)

圖13.12p2位于p1的右下角

考慮到p1與p2具有上面兩種分布情形程式提供了如下方法進行處理。

上面的兩行粗體字代碼分别處理了p2位于p1的右上和右下的兩種情形。

程式中用到了isLeftUp、isLeftDown、isRightUp、isRightDown方法來判斷p2位于p1的左上、左下、右上、右下4種情形這4個方法的實作比較簡單隻要對它們的X、Y坐标進行簡單判斷即可代碼如下。

——————本文節選自《瘋狂ios講義上》

瘋狂ios講義瘋狂連載之實作遊戲邏輯(2)

本文轉自 

fkJava李剛 51CTO部落格,原文連結:http://blog.51cto.com/javaligang/1360987 ,如需轉載請自行聯系原作者