【问题标题】:'Receiver type "CCParticleBatchNode" for class message is a forward declaration''类消息的接收器类型“CCParticleBatchNode”是前向声明'
【发布时间】:2011-11-01 11:47:19
【问题描述】:

标题不言自明。我通过从 github 下载文件、删除项目中的 cocos2d 项目并重新添加来安装 cocos2d 1.1。

我的头文件中有一个“@class CCParticleBatchNode”,前缀和相关的实现文件中有一个#import“cocos2d.h”。当我浏览到 CCParticleBatchNode 应该在的位置时,它就在那里。

那么,有人知道问题可能是什么吗? :)

编辑:这是一些代码。

#import "PrecipicationLayer.h"
#import "cocos2d.h"

@implementation PrecipicationLayer
@synthesize cloudLayer;
- (id)init
{
    self = [super init];
    if (self)
    {
        rain = [CCParticleRain node];
        rainBatch = [CCParticleBatchNode particleBatchNodeWithFile:@"Raindrop48px.png" capacity:400 useQuad:YES additiveBlending:NO];
        [self addChild:rainBatch];

        [self schedule:@selector(tick:)];
    }
return self;
}

和头文件:

#import <Foundation/Foundation.h>
#import "cocos2d.h"
@class CCParticleBatchNode;

@interface PrecipicationLayer : CCLayer {
    CCParticleBatchNode *rainBatch;
}

@end

所有不相关的部分都已删除。

【问题讨论】:

  • 能贴出相关代码吗?
  • 完成。虽然从中删除了不相关的部分,我很确定这应该有效(它有效并且一直适用于其他 cocos2d 类)......

标签: iphone objective-c ios xcode cocos2d-iphone


【解决方案1】:

哦,好吧……常见的 cocos2d 升级麻烦。

我个人会简单地安装 cocos2d 1.1 模板(假设它们是最新的)并基于其中一个 cocos2d 模板创建一个项目。然后将您的源代码和资源添加到这个新创建的项目中。这通常比尝试替换和更新现有项目中的 cocos2d 代码效果更好。

我猜你的问题可能来自删除 cocos2d 项目,而不是来自硬盘驱动器中的文件。这意味着仍然可能有一些旧版本的遗留文件仍然包含在项目中并构建。在移动新的 cocos2d 文件之前,您肯定想删除所有现有的 cocos2d 文件。

最后,不排除你从github下载的版本坏了的可能。这不会是第一次。尝试改用网站上的可下载版本,并记住 1.1 目前只是一个测试版。

提示:将来你可能想用Kobold2D 创建cocos2d 项目,它有一个upgrade tool 可以解决所有这些麻烦。

【讨论】:

  • 听起来不错!我确实从网站上下载了它,如果我在新模板中尝试批处理节点,它确实可以工作。将尝试您的升级建议:)
【解决方案2】:

如果您已将 cocos2d.h 导入 .h 文件,则无需将其导入 .m 文件。不过,我不认为这是问题所在。

有两种可能:

  • CCParticleBatchNode 在 cocos2d.h 中定义,在这种情况下您不需要前向声明,这可能会使编译器感到困惑。
  • CCParticleBatchNode 没有在 cocos2d.h 中定义,在这种情况下,您需要在实现文件中导入 CCParticleBatchNode.h,因为您只有前向声明。

【讨论】:

  • 如果我删除@class CCParticleBatchNode,我会在界面'未知类型名称'CCParticleBatchNode'中收到警告;你的意思是'CCSpriteBatchNode'吗?'......如果我查看'cocos2d.h'文件,我确实看到了CCParticleBatchNode.h的导入。我确实隐约记得以前遇到过这样的问题,但我不记得当时是什么解决了这个问题:(
  • 几行。头文件中的语义问题“未知类型名称”(删除了@class 行)和尝试初始化时实现中的相同错误,以及由于类方法未知而导致的 ARC 问题。
  • 你可能无法使用ARC,我不知道cocos2d是否已经更新支持这个但我怀疑它。
  • 我对此表示怀疑,但我相信我已将其设置为不使用 ARC。但是,只要编译器知道这一点,我相信警告就会消失。
  • 官方cocos2d还不支持ARC,目前只计划在cocos2d 2.x中支持ARC。不过 Tiny Tim Games 有一个分支:tinytimgames.com/2011/07/22/cocos2d-and-arc,并且 Kobold2D 也支持 ARC (kobold2d.com)。
【解决方案3】:

“把我项目里面的cocos2d项目去掉再重新添加。”

检查文件是否是构建过程的一部分。在 XCode 4 中,单击 Project Navigator 顶部的项目名称,选择“Build Phases”,确保“cocos2d library”显示在目标名称下方。如果是,则展开“Target Dependencies”,并确保它也列在此处。然后展开“Link binary with Libraries”并确保它也被添加到那里。

【讨论】:

  • 'cocos2d(cocos2d-ios)' 被添加到 'Target Dependencies' 下,'libcocos2d.a' 被添加到 'Link Binary With Libraries' 下。
  • 在 Cocos2d 库下(在构建阶段),“复制标题”,是否有 CCParticleBatchNode.h 文件?如果是这样,请确保 m 文件也包含在“编译源”下。
  • 是的,它们都在那里。这真的很奇怪:S 因为我们最近将我们的应用程序发送给 Apple 并且新的 cocos2d 应该可以解决我们遇到的一些问题......
  • 最后一次检查,Cocos2d.m & m 文件也是我让你检查最后一条评论的地方吗?您的项目中是否还有其他 Cocos 元素(CCSprite 等)?他们没有问题吗?您还应该删除“@class CCParticleBatchNode;”这是多余的。
  • @class 已被删除。我没有从其他 cocos2d 元素中得到任何错误,并且它们之前工作过。是的,cocos2d.h/m 文件也在里面。
【解决方案4】:

我在下载最新模板时遇到了同样的问题。问题是,即使文件 CCParticleBatchNode.h 和 CCParticleBatchNode.m 物理存在,它们也没有被添加到 Xcode 项目模板中。我只需要将它们添加到项目中,然后编译。

【讨论】:

  • 嗯,让我们试试。希望这就是问题所在......你是把它添加到 cocos2d 项目还是你的项目本身?
  • 我的 cocos2d 在一个名为 libs 的文件夹中,所以我做了 libs -> cocos2d -> (右键单击)-> "Add Files to ..." -> 找到文件并添加它们。如果它允许您选择并添加这两个文件,则意味着它们不在您的项目中,添加它们可能就是您需要做的所有事情。如果它们是灰色的,那么它们已经在您的项目中,问题可能出在其他地方。
  • 我设法修复了它。但我将 cocos2d 添加为项目,而不是 lib 文件夹,因为这是为所有 cocos2d 关闭 ARC 的唯一相对简单的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多