我正在关注“学习Cocos2D”,在第4章中,我遇到了以下指令:
在GameLayer init方法中,在scheduleUpdate之后添加对下面讨论的initSpiders方法的调用:
-(id) init {
if ((self=[super init])) {
...
[self scheduleUpdate];
[self initSpiders];
}
return self;
}
我得到和ARC错误消息:'GameLayer'没有可见的@interface声明选择器'initSpiders'
我在行上收到相同的消息:self resetSpiders
我错过了什么?到目前为止,一切都在建立并运行良好。答案 0 :(得分:0)
此问题源于initSpiders
和resetSpiders
未在类接口中声明,并且在.m
文件中使用它们之后定义。
如果它们没有完全丢失,您可以通过以下两种方式解决此问题:
将initSpiders
和resetSpiders
方法的定义移到init
方法之上,错误将消失;
在班级的@interface
中添加两种方法的声明。
(如果你同时使用它们,它也会起作用)
检查您的代码,看看这些方法的实现是否可用。
答案 1 :(得分:0)
您的错误似乎是您没有按照本书的下一部分。完成下一部分应该允许您编译代码而不会出现这样的警告。
本书该部分的更完整摘录是:
在GameScene
之后立即添加对下面讨论的init
方法中,在initSpiders
scheduleUpdate:
方法的调用
-(id) init {
if ((self = [super init]))
{
… 96 CHAPTER 4: Your First Game
[self scheduleUpdate];
[self initSpiders];
}
return self;
}
之后,
GameScene
类中添加了相当多的代码,从清单4-8中的initSpiders
方法开始,该方法创建了蜘蛛精灵。清单4-8。 为了更容易访问,Spider精灵被初始化并添加到CCArray
-(void) initSpiders
{
CGSize screenSize = [[CCDirector sharedDirector] winSize];
// using a temporary spider sprite is the easiest way to get the image's size
CCSprite* tempSpider = [CCSprite spriteWithFile:@"spider.png"];
float imageWidth = [tempSpider texture].contentSize.width;
// Use as many spiders as can fit next to each other over the whole screen width.
int numSpiders = screenSize.width / imageWidth;
// Initialize the spiders array using alloc.
spiders = [[CCArray alloc] initWithCapacity:numSpiders];
for (int i = 0; i < numSpiders; i++)
{
CCSprite* spider = [CCSprite spriteWithFile:@"spider.png"];
[self addChild:spider z:0 tag:2];
// Also add the spider to the spiders array.
[spiders addObject:spider];
}
// call the method to reposition all spiders
[self resetSpiders];
}