像迷宫游戏中的墙壁

时间:2013-06-25 14:51:32

标签: iphone ios objective-c intersection

我有两张照片:大理石和障碍物。 我想确保大理石倾斜在障碍物上滚动。 如果大理石接触到障碍物的边缘,则应将其设置为先前的坐标,使其看起来像大理石停在障碍物的边缘。 代码的代码是什么? 我的代码:

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


}

有人可以给我理论这样做吗?

谢谢马蒂斯

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以像这样保存大理石的先前位置:

CGRect previousPosition = marbleFrame.frame;

在下一次迭代中,如果大理石碰撞墙壁,请将其框架设置为。

其他解决方案是检查从哪一侧发生碰撞(上,左,右或下),这很容易比较交叉点矩形(例如,如果交叉点矩形顶侧比右侧大,则意味着是从顶部或向下碰撞)并在进入之前放置除了它之外的marbleFrame。

或者,您可以在iOS7中使用非常棒的SpriteKit,它非常容易实现,但仅适用于iOS7设备。

答案 1 :(得分:1)

首先,碰撞检测并不是一件容易正常工作的事情,因此您可能需要查看一些外部库,例如ObjectiveChipmunk或Box2d。

话虽如此,你可以在其他声明中加入一些内容。解决这个问题的一般方法是“将物体移回”,这取决于他正在击中的边界。如果他与左边界相撞,向右移动x个单位,如果他击中顶部边界,向下移动x个单位,等等。

另一种可能的解决方案是跟踪对象“有效”位置,一旦它与墙碰撞,将对象返回到其先前位置。

相关问题