首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"'CCLayer‘可能不会响应...“

"'CCLayer‘可能不会响应...“
EN

Stack Overflow用户
提问于 2012-02-07 10:38:10
回答 2查看 477关注 0票数 0

使用cocos2d,这似乎出现在一些消息传递的实例中。我必须承认,我对Objective-C还不是很精通,因为我在写代码的时候通读了这本书。

对于熟悉cocos2d的人来说,您可以使用CCLayer类。在我的例子中,我有一个GameLayer,它有一些子层,如下所示:

代码语言:javascript
复制
@interface GameLayer : CCLayer {  
  CCSprite *_background;
  CCPanZoomController *_controller;    
  CCLayer *_truckLayer;
}

然后我有一个特殊的initWithLayers方法来在这个层中添加我的子层:

代码语言:javascript
复制
-(id)initWithLayers:(TruckLayer *)truck
{
if( (self=[super init])) {
    self.truckLayer = truck;
    .....
}

现在,如果我向self.truckLayer发送一条消息,我会在Xcode中得到以下警告:

代码语言:javascript
复制
'CCLayer' may not respond to 'getNextAvailableSpot'

一个示例可能是这样做的:

代码语言:javascript
复制
CGPoint nextSpot = [self.truckLayer getNextAvailbleSpot];

所有这些代码都能成功编译和运行,所以我很好奇这里遗漏了什么?如果我在这里做错了什么,我不想让我的代码使用这些。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 10:55:58

这是因为您将*_truckLayer声明为CCLayer,而在init上将(TruckLayer *)truck分配给CCLayer* _truckLayer。所以CCLayer不知道getNextAvailableSpot方法,所以编译器会给你警告。

代码运行得很好,因为_truckLayer指向正确的TruckLayer,它知道getNextAvailableSpot

只需更改您的声明,警告就会消失。

代码语言:javascript
复制
@interface GameLayer : CCLayer 
{  
    CCSprite *_background;
    CCPanZoomController *_controller;    
    CCLayer *_truckLayer;
}

代码语言:javascript
复制
@class TruckLayer;
@interface GameLayer : CCLayer 
{  
    CCSprite *_background;
    CCPanZoomController *_controller;    
    TruckLayer *_truckLayer;
}
票数 2
EN

Stack Overflow用户

发布于 2012-02-07 10:45:05

正如警告所说:编译器不能保证CCLayer具有处理getNextAvailableSpot消息的方法。除非您以某种方式动态添加了这种方法,或者有其他(非常好的)理由相信存在这种方法,否则这可能是一个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9170290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档