2013-06-25 62 views
2

我有兩個圖像:大理石和障礙物。 我想確保大理石不能翻過障礙物。 如果大理石碰到障礙物的邊緣,它應該設置爲之前的座標,以便它看起來像大理石停在障礙物的邊緣上。 那是什麼代碼? 我的代碼:像迷宮般的牆壁遊戲

CGRect obstacleBounceFrame = [_obstacleBounce frame]; 
CGRect intersectionWithObstacleBounce = CGRectIntersection(marbleFrame, obstacleBounceFrame); 
if(CGRectIsNull(intersectionWithObstacleBounce)) { 
    // Not touching yet - null intersection 
} else { 


} 

有人可以給我這樣的理論嗎?

感謝馬蒂斯

enter image description here

+0

如果您想展望iOS 7開發,可以使用SpriteKit框架來利用新的物理包。但是,只適用於iOS 7+。 – Corey

回答

2

您可以保存大理石像這樣原來的位置:

CGRect previousPosition = marbleFrame.frame; 

而且在接下來的迭代中,如果大理石碰撞牆壁,設置其框架對此。

其他解決方案是檢查哪一側發生碰撞(上,左,右或下),比較交叉矩形很容易(例如,如果交叉矩形頂端比右側大,則意味着從上面或下面碰撞),並在進入之前放置marbleFrame。或者,你可以在iOS7中使用真棒SpriteKit,它很容易實現,但只適用於iOS7設備。

+1

Thx爲您的答案,這幫助了我!我知道SpriteKit會容易得多,但是我必須等到IOS 7發佈才能上傳我的程序,那是不行的。 ;) – MatisDS

1

首先,碰撞檢測並不是一件容易的事情,所以您可能需要查看一些外部庫,如ObjectiveChipmunk或Box2d。

這就是說,有幾件事你可以把它放入其他語句。通常的做法是「將對象移回」,這取決於他打哪個邊界。如果他與左邊界相撞,則將其移動x個單位到右邊,如果他正在擊中頂部邊界,將他移動x個單位,等等。

另一種可能的解決方案是跟蹤對象「有效「位置,一旦與牆壁碰撞,將物體返回到原來的位置。

+0

感謝您的回答。 – MatisDS

+0

沒問題:D – Monkeyanator

+0

當我只有15 xp的時候,我纔可以投票,這是非常令人沮喪的,請您爲我的帖子評分,以便我可以評價您的答案? = d – MatisDS