我有两张照片:大理石和障碍物。 我想确保大理石倾斜在障碍物上滚动。 如果大理石接触到障碍物的边缘,则应将其设置为先前的坐标,使其看起来像大理石停在障碍物的边缘。 代码的代码是什么? 我的代码:
CGRect obstacleBounceFrame = [_obstacleBounce frame];
CGRect intersectionWithObstacleBounce = CGRectIntersection(marbleFrame, obstacleBounceFrame);
if(CGRectIsNull(intersectionWithObstacleBounce)) {
// Not touching yet - null intersection
} else {
}
有人可以给我理论这样做吗?
谢谢马蒂斯
答案 0 :(得分:2)
您可以像这样保存大理石的先前位置:
CGRect previousPosition = marbleFrame.frame;
在下一次迭代中,如果大理石碰撞墙壁,请将其框架设置为。
其他解决方案是检查从哪一侧发生碰撞(上,左,右或下),这很容易比较交叉点矩形(例如,如果交叉点矩形顶侧比右侧大,则意味着是从顶部或向下碰撞)并在进入之前放置除了它之外的marbleFrame。
或者,您可以在iOS7中使用非常棒的SpriteKit,它非常容易实现,但仅适用于iOS7设备。
答案 1 :(得分:1)
首先,碰撞检测并不是一件容易正常工作的事情,因此您可能需要查看一些外部库,例如ObjectiveChipmunk或Box2d。
话虽如此,你可以在其他声明中加入一些内容。解决这个问题的一般方法是“将物体移回”,这取决于他正在击中的边界。如果他与左边界相撞,向右移动x个单位,如果他击中顶部边界,向下移动x个单位,等等。
另一种可能的解决方案是跟踪对象“有效”位置,一旦它与墙碰撞,将对象返回到其先前位置。