1

我有一个名为 GameScene 的类,它是 cocos2d 场景的子类。

在那里我有两层。GameLayer 和 ControlsLayer。您可能已经知道我希望 ControlsLayer 在 GameLayer 中移动内容。准确地说,我试图从 ControlsLayer 控制 GameLayer 中的 cPBody。

目前,我正在尝试将来自 ControlsLayer 的指令路由到 GameScene 中,然后再返回到 GameLayer。如果这是有道理的。无论如何,我无法让它工作。我有 PHP 背景,所以我认为我错误地将我的 PHP 经验应用于 Obj-C。

我的想法是,我应该能够使用类似的东西访问类/对象中的属性

aThing *someThing = someInstance->aThing;

从我一直在查看的示例代码看来,这应该可以工作。但事实并非如此。这是代码,尽可能精简到http://pastebin.com/d49c9d0be

而不是知道如何解决这个特定问题,问题是,我不明白什么?

4

3 回答 3

3

在 Objective-C 中,您需要定义访问器方法来获取实例变量,除非您从相同的类类型调用它(例如,当您实现 NSCopying 协议并且需要设置私有变量,但现在不用担心)。

最简单的方法是在你的头文件中使用 定义一个属性@property(retain) SomeClass *name;,并让 Objective-C 通过放入@synthesize name = instanceVariable;你的实现来生成它。object.name;然后,您可以使用或[object name];访问该类之外的变量。有关更多信息,请查看属性和面向对象编程的文档。

于 2009-03-30T17:07:34.170 回答
1

您不会以任何形状公开 gameLayer.myBody 属性。你必须使用@property 声明(假设objective-c 2.0)(这里是一个例子)。

我没有任何 PHP 背景,所以我不知道它在 PHP 中可能有何不同。

于 2009-03-30T17:08:00.330 回答
1

访问对象中的属性的正确方法如下:

aThing * someThing = someInstance.aThing; // new style

或者

aThing * someThing = [someInstance aThing]; // old style

如果您使用 c 进行编码,那么->运算符将是有意义的。然而,在 Objective-c 中,对象总是通过指针传递。没有objective-c 变量实际上持有一个对象,它们只是持有指向对象的指针。语言设计者只是决定使用[]or.语法来访问成员,所以这就是我们必须做的!

于 2009-03-30T17:10:20.513 回答