【问题标题】:how can i return same object in CGRectIntersectsRect if statement?如何在 CGRectIntersectsRect if 语句中返回相同的对象?
【发布时间】:2015-03-13 08:25:02
【问题描述】:

这行代码在 iOS 8 之前可以工作,但是在更新到 iOS 8 之后,这行代码就不再工作了。

if (CGRectIntersectsRect(icon1.frame, pig.frame)
    && icon1.image == [UIImage imageNamed:@"BerryBlueberryIphone.png"]) {

我还需要哪些其他选项才能实现与旧代码行相同的目标。 我需要一个 if 语句来检测两个对象与具有特定图像的对象之一的碰撞。

我在此链接中有更多关于我正在尝试制作的游戏的信息和代码。该链接指向我在更新后知道我的游戏出了什么问题之前提出的上一个问题。这是链接...

Collision not working on iphone just ipad Xcode 6.1.1

【问题讨论】:

    标签: ios objective-c collision-detection imagenamed


    【解决方案1】:

    要解决此问题,您需要对游戏中的对象进行更强大的表示。看起来您希望检测的碰撞发生在两个 UIView 之间,并且您想知道其中一个视图是否具有特定图像。

    考虑这一点的更好方法是检测模型中由视图表示的对象之间的碰撞。当视图控制器检测到两个视图重叠时,它可以询问相应的模型是猪还是蓝莓或其他什么。在 OS8 之前,您在将相同的字符串传递给 imageNamed: 时依赖于操作系统来回答相同的图像。即使这样,更好的设计也是拥有一个模型对象。

    我强烈建议您以这种方式重新考虑您的项目,但作为快速解决方案,您可以为蓝莓图像的 imageViews 保留一个特殊标签(例如 999)。那么碰撞测试可以这样写:

    if (CGRectIntersectsRect(icon1.frame, pig.frame) && icon1.tag == 999) {}
    

    【讨论】:

    • 谢谢 danh,在看到您的答案之前,我最终做了一个布尔值来识别特定图像。在未来的项目中,我会记住物体之间的碰撞。现在它适用于我的第一个简单游戏。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2016-10-19
    • 2018-04-18
    • 2015-07-28
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多