2013-06-25 61 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