0

嘿,我的应用程序目前有一个大问题,它太不准确了。

我有一个气球的图像,https ://dl.dropbox.com/u/2578642/Balloonedit.png

我有一个飞镖,如果它撞到气球上,游戏就会结束。

目前我正在用 8 个 UIImageViews 填充气球的图像。我正在检测飞镖是否击中它们,这应该使它非常准确,但事实并非如此,飞镖在它要碰撞时几乎会穿过气球,所以我有一个计划,有什么方法可以检测到什么时候飞镖击中气球的实际图像而不是 UIImageView,或者有没有办法在气球周围绘制边框并检测它是否击中?

目前我正在使用此代码来检测碰撞:

if (CGRectIntersectsRect(pinend.frame, balloonbit1.frame)){
    [maintimer invalidate];
    accelManeger.delegate = nil;
[ball setImage:img];
[UIImageView beginAnimations:nil context:NULL];
[UIImageView setAnimationDuration:0.3];
ball.transform = CGAffineTransformMakeScale(2, 2);
[UIImageView commitAnimations];

}

因此,在一种方法中,有 40 位这样的代码,您可以想象它的响应不是很准确/快速。所以就像我说的,有没有办法在气球周围画一个边框或其他东西,并检测边框和飞镖之间的碰撞?因为那时我会想象它会运行很多,因为它只需要处理 5 位代码。

谢谢你的帮助。

这是一个大问题,所以如果你能回答,我会购买你的应用程序:)

干杯,哈利:/

4

2 回答 2

0

当我到达“……这些代码中的 40 位……”时,警钟开始响起。为什么不将其重构为一种重复调用的方法?

在不知道您的应用程序的性质的情况下,我不确定这是否合适,但我可以建议您使用像Chipmunk Physics这样的物理引擎吗?它可以让您定义碰撞形状、移动物体的重力,并在物体相互碰撞时触发回调。这将比你现在正在做的要快几个数量级。

于 2010-04-07T11:55:19.757 回答
0

你的气球几乎是完美的椭圆。我认为你可以使用这样的东西来检查碰撞

(x-cx)**2 / a**2 + (y-cy)**2 / b**2 <= 1.0

在哪里..

  • x, y = 引脚位置
  • cx, cy = 气球的中心
  • a = 气球宽度 / 2
  • b = 气球高度 / 2

但是,我仍然不知道为什么您的代码运行不流畅。问题可能不在这里。

于 2010-04-07T12:19:02.770 回答