gpt4 book ai didi

objective-c - 为什么在 cocos2d 中 CCLayer 的声明很奇怪?

转载 作者:行者123 更新时间:2023-11-28 22:52:24 25 4
gpt4 key购买 nike

我有一个 GameScene 类,在初始化期间我制作了一个场景并将一个 child 附加到它 - 一个层。我注意到它的奇怪代码:

    CCScene *scene = [CCScene node];
CCLayer *layer = [GameScene node];
[scene addChild:layer];

为什么不这样做呢?

CCLayer *layer = [CCLayer node];

这并没有增加可读性,还是我在这里遗漏了一些基本的东西?另外,为什么根本不使用 alloc init?

最佳答案

[CCNode node];

是一个静态(类)方法。它会自动调用 [[[self alloc] init] autorelease];

任何 CCNode 子类都可以使用这个静态初始化器进行初始化。基本上是为了方便,真的不需要。 (虽然,就像我说的,拥有它真是太好了)。

类方法使用“+”号,实例方法使用“-”号。类方法就像 Java 中的静态方法。无需创建该类的实例即可调用它们。它可能看起来像这样: [YourClass doSomething];//不需要 YourClass 的实例

实例方法需要其类的实例才能运行。这看起来像:

YourClass *yClass = [[YourClass alloc] init];
[yClass doSomethingElse]; //Needs an instance of YourClass

我没看过,但我认为 node 方法看起来像这样:

+ (CCNode*)node {
return [[[self alloc] init] autorelease];
}

奇怪的声明只是返回一个场景(使用静态初始化程序初始化),其中您的自定义层作为子层,然后 CCDirector 可以使用和显示该场景。

编辑:我觉得可以增加清晰度。

奇怪的声明只是一个返回场景的静态初始化器+ (CCScene*)scene

关于objective-c - 为什么在 cocos2d 中 CCLayer 的声明很奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com