确定。我正在开始一个新的Cocos2D模板,试图弄清楚CCMenuAdvanced是如何工作的。从没有物理的Cocos2D 2.1 b2项目开始,将CCMenuAdvanced.h和CCMenuAdvanced.m文件添加到我的项目中,从HelloWorldLayer.m init方法中删除了样板代码,一切运行正常。黑屏。在我看来,就像我应该导入所有库一样,当我键入与CCMenuAdvance有关的任何内容时,它会自动完成,因此看起来工作正常。以下是我在HelloWorldLayer init方法中的所有内容:
CCMenuItemImage *scrollableSprite = [CCMenuItemImage itemWithNormalImage:@"640x2272ScrollableImage.png"
selectedImage:@"640x2272ScrollableImage.png"
target:self
selector:@selector(iDunnoYet)];
正如预期的那样,它会编译并运行一个未使用的变量'sprite'警告,但运行正常。一旦我将这行代码添加到项目中,期望得到另一个未使用的变量错误(菜单):
CCMenuAdvanced *menu = [CCMenuAdvanced menuWithItems:scrollableSprite, nil];
我收到此错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_CCMenuAdvanced", referenced from:
objc-class-ref in HelloWorldLayer.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已经注释掉了这一行,它再次构建并运行良好。我已经阅读了两个可能引发此错误的不同内容:1)我在项目中导入了两次文件或库,以及2)我没有在构建设置中正确包含必要的库。首先,我检查了我的标题,看起来很好。我只在#WiaWorldLayer.h文件中#imported CCMenuAdvanced.h文件。第二,它是一个Cocos2D模板,没有上面提到的代码行,所以我认为所有必要的库都应该已经包含在内了。
无论如何,如果有人能指出我正确的方向,我会很感激。提前致谢。当然,如果需要,我可以提供更多代码。
答案 0 :(得分:1)
验证CCMenuAdvanced.m是否已添加到项目的目标中。选择文件,打开“实用工具”视图并查看文件的目标成员身份。文件旁边应该有一个复选框。像这样: