使两个CGRects保持在一起,而其中一个CGRect移动

时间:2014-03-02 04:44:51

标签: ios objective-c cocoa-touch geometry

我有一个游戏,球从平台反弹到平台。我希望改变它,以便当球击中平台时,它不会自动反弹,而是会粘在平台上,并在用户告诉它时反弹。我现在设置的方式如下:

if (CGRectIntersectsRect (ball.frame, platform1.frame) && (UpMovement < -2)) {

     [self bounce];
     [self platformshiftdown];

}

其中bounce包含NSArray动画图像,platformShiftDown有一个int告诉它要移动多少(如果有必要提供这部分代码)解决这个问题)。

基本上,我想改变它,以便当球与平台的框架相交时,它会停止并“粘住”平台,直到用户触摸弹跳/跳跃按钮。我在想有两种方法可以做到这一点:

if (CGRectIntersectsRect (ball.frame, platform1.frame)) {
        ballMovement = -2
        platformMovement = -2 
}

    //to create the illusion that the ball is stuck to the platform, because they both have the same downward movement

然后设置一个按钮,用户点击该按钮可以跳出/跳出平台。但这看起来并不那么好,因为球不一定看起来像是坚持平台。是否有任何类型的代码我可以编写说“如果CGRectIntersectsRect ......球卡住了?” (显然这不是代码,只是试图解决问题)。

1 个答案:

答案 0 :(得分:0)

球很可能奇怪地移动,因为它与平台保持重叠相交。

if (CGRectIntersectsRect (ball.frame, platform1.frame)) {
    [self platformShiftDown];

    CGRect newRect = ball.frame;
    newRect.y = platform.frame.y + ball.frame.height;
    ball.frame = newRect;
}

这将始终将球准确地移动到平台的边缘。 如果平台移动,球也会移动。 平台首先移动以确保球保持同步也很重要。