【问题标题】:Objective-C : How to access properties of an object within another class?Objective-C:如何访问另一个类中对象的属性?
【发布时间】:2012-04-29 03:07:48
【问题描述】:

我正在 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 是否相交。

【问题讨论】:

  • "我在 class1 中有 object1,在 class2 中有 object2,所以我无法访问 class2 中的 object1。"
  • #import 必要的类接口文件了吗?
  • “我尝试将对象作为参数传递,但收到强 id 错误”
  • 为什么要为每个对象创建“单独的类文件”???您可以从单个类文件创建一百万个对象。
  • 无论 object1 和 object2 是同一个类还是不同的类,您仍然需要对两者具有可寻址性以检查相交。它们是两个不同的类这一事实几乎不会影响任何事情,除了您应该适当地声明指针这一事实。

标签: objective-c class


【解决方案1】:

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

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

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

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

【讨论】:

  • 抱歉延迟回复。这是我想听到的,谢谢大家的回复。我试图直接传递对象而不使用指针,这是我的错。我正在接受您的建议 theMikeSwan 并创建一个单独的交叉类,谢谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
相关资源
最近更新 更多