0

我正在objective-c中创建一个游戏,需要检测两个对象何时与帧相交。

我通常会通过使用检测到这一点

if (CGRectIntersectsRect(object1.frame, object2.frame)) {/*do something*/}

我唯一的问题是我为每个对象创建了单独的类文件。我在class1中有object1,在class2中有object2,所以我无法访问class2中的object1。

我尝试将对象作为参数传递,但收到一个强 id 错误,所以我假设不允许传递对象。如何访问 class2 中的 object1.frame?我还是objective-c的新手,所以我会很感激任何建议!提前致谢,如果您需要更多信息,请告诉我。

编辑:很抱歉模棱两可,我不是很清楚。我在 class1.h 中声明了 UIImageView 或“object1”,并在整个 class1.m 文件中使用。

我有另一个类,我在 class2.h 和 class2.m 中声明了另一个 UIImageView“object2”。在 class2.m 文件中的某一时刻,我需要查看 object1 和 object2 是否相交。

4

1 回答 1

1

实际上,由于它们都是图像视图,因此它们都不应该真正处理相互交叉的问题。更好的方法是让第三个类与前两个类中的每一个都有连接,负责检测冲突,或者创建一个 C 函数,该函数只接受UIImageView符合适当设计的协议的任意两个实例,如果存在是一个碰撞告诉对象来处理它。

void checkForCollision(object1, object2) {
    if (CGRectIntersectsRect(object1.frame, object2.frame)) {
        [object1 handleCollisionWith:object2];
        [object2 handleCollisionWith:object1];
    }
}

有了这样的东西,当您以后需要检测涉及第三个或第四个对象的碰撞时,它会让生活变得更轻松。两个对象都需要具有相同的超级视图,否则这将不起作用。

此外,您可以传递对象,但通常通过引用传递。为了让 object1 告诉或询问 object2 任何它必须有一个指向它的指针,反过来同样适用。

于 2012-04-28T19:07:48.673 回答