objective-c - iOS Pong 开发,碰撞检测

标签 objective-c ios collision-detection

我正处于完成我的第一个可用 iOS 应用程序的后期阶段。 我正在创建一个简单的 Pong 游戏,我正在使用 CGRectIntersectsRect 进行简单的碰撞检测,但我遇到了一个问题。

if(CGRectIntersectsRect(mic.frame,plosina_a.frame)) {
        if(mic.center.y < (plosina_a.center.y + plosina_a.frame.size.height)) {
            RychlostMice.y = -RychlostMice.y;
        }
    }
    if(CGRectIntersectsRect(mic.frame,plosina_b.frame)) {
        if(mic.center.y < (plosina_b.center.y + plosina_b.frame.size.height)) {
            RychlostMice.y = -RychlostMice.y;
        }
    }

当我像这样使用它时,球(麦克风)有点到达 Racket (plosina)并开始以另一种方式移动,在 Racket 的中间。 我的编程老师设法通过添加 .frame.size.height 而不是我以前使用过的 .frame 来解决其中一个桨(_b 一个)的这个问题,但是当我为另一个桨做同样的事情时没用我不知道那是怎么回事。

此外,它还会产生另一个问题,有时会出现球被 Racket 卡住的情况 - 所以我正在寻找整个对象的定义,而不仅仅是一侧?

我希望你能帮上忙。

最佳答案

我可以在这里看到三个潜在的问题。

第一个是你要等到球与 Racket 重叠才算触碰。听起来你真的想在球接触 Racket 时开始向另一个方向移动,而不是在球与 Racket 相交时。 CGRectIntersectsRect 在返回 true 之前等待直到它们重叠。如果您通过调用 CGRectInset 使任一矩形大一个像素,您的测试将在球到达那个桨时立即返回 true——到那时,将有一个像素与扩展矩形重叠。测试看起来像这样:

if(CGRectIntersectsRect(CGRectInset(mic.frame, -1, -1),plosina_a.frame)) {
    if(mic.center.y < (plosina_a.center.y + plosina_a.frame.size.height)) {
        RychlostMice.y = -RychlostMice.y;
    }
}
if(CGRectIntersectsRect(CGRectInset(mic.frame, -1, -1),plosina_b.frame)) {
    if(mic.center.y < (plosina_b.center.y + plosina_b.frame.size.height)) {
        RychlostMice.y = -RychlostMice.y;
    }
}

第二个潜在问题与球的速度有关。没有看到所有的代码,我不知道这是否是一个问题。如果球一次可以移动超过一个像素,它很容易重叠——甚至穿过—— Racket 而不被击中检测。您可以添加很多逻辑更改来解决这个问题,但最简单的解决方案可能是确保球一次移动不超过一个像素。

最后,如果您想对两个桨都使用 hack,请在游戏的另一侧反转比较符号。

关于objective-c - iOS Pong 开发,碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858131/

相关文章:

ios - 在 objective-c 文件中有一个按钮(来自 pod)并从 swift 中继承它

objective-c - iOS7 中的测试驱动开发从哪里开始?

iphone - 使用 Couchbase Mobile 是否为时过早?

ios - NSArray 元素无法匹配 Swift 数组元素类型 - 带有 Swift 库的 Objective-C(图表)

algorithm - 碰撞检测优化

ios - ScrollView 图片addSubview 问题

iPhone - 当 [super init] 失败时使用 self = [super init]

ios - UIAlert 错误,其 View 不在窗口层次结构中

algorithm - 查找两个移动、旋转边界框相交的时间和位置

collision-detection - 快速的射弹并不总是能击中