我正在使用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是否相交。
答案 0 :(得分:1)
实际上,因为它们都是图像视图,它们都不应该真正处理相互交叉。更好的路由是让第三个类与前两个类中的每个类建立连接,这两个类负责检测冲突或创建一个C函数,该函数只接受符合适当的任何两个UIImageView
实例。设计的协议,如果有碰撞,告诉对象处理它。
void checkForCollision(object1, object2) {
if (CGRectIntersectsRect(object1.frame, object2.frame)) {
[object1 handleCollisionWith:object2];
[object2 handleCollisionWith:object1];
}
}
有了这样的东西,以后你需要检测涉及第三或第四个物体的碰撞,这会让生活更轻松。两个对象确实需要具有相同的超视图,否则这将无效。
此外,您可以传递对象,但通常通过引用传递。为了让object1告诉或询问object2,它必须有一个指向它的指针,反之亦然。