0

我正在制作一个应用程序,如果图像移动到另一个点,我希望在其中发生一些事情。比如首先我有一个图像在屏幕上水平移动,'

self.ball.center = CGPointMake(self.ball.center.x + self.gravity.x / 8.0 * 200.0, 9);

然后当它到达某个地方时,另一个图像会从那个地方向下移动。

CGPoint a = CGPointMake(9, 9);
if (CGPointEqualToPoint(ball.center,a)) {

                balla.hidden = NO;
                self.balla.center = CGPointMake(self.balla.center.x , (self.balla.center.y)- (self.gravity.y / 8.0 * 200.0));
            }

第一次它工作正常,但是当我输入下一个语句以将另一个图像从另一个位置向下移动时,没有任何反应。

CGPoint b = CGPointMake(86, 9);
            if (CGPointEqualToPoint(ball.center,b)) {

                ball2a.hidden = NO;
                self.ball2a.center = CGPointMake(self.ball2a.center.x , (self.ball2a.center.y)- (self.gravity.y / 8.0 * 200.0));}

关于为什么这不起作用的任何想法

4

1 回答 1

1

如果您通过添加一些浮点值偏移来移动球,您可能会“跳过”该点b- 您可能永远不会击中 b,而是会出现在它的前面一点,然后稍微在它后面一点。

与其测试您是否与该点“相等”,不如比较球与该点之间的距离并查看它是否在某个小半径内。一个简单的欧几里得距离可以工作。

CGFloat euclid_dist(CGPoint a, CGPoint b)
{
    return sqrt((b.x-a.x)*(b.x-a.x) + (b.y-a.y)*(b.y-a.y));
}

然后,您可以使用它来查看您是否“达到”了这一点:

if (euclid_dist(ball.center, b) < 0.1)
{
    // React appropriately
}

一般来说,测试浮点数之间的相等性是有问题的。

于 2013-10-18T05:10:02.303 回答