我的问题是关于从一个班级向其孩子传达两个方向。
我有一个带有子 GameObject CCNode 的 GameLayer CCLayer。GameLayer 是一个半单例共享层。我需要在 GameLayer 的标题中导入 GameObject.h 才能初始化 GameObject。我现在正试图与游戏玩家沟通,但我被卡住了。代码在问题之前都有效。
static GameLevel1Layer* sharedGameLayer;
+(GameLevel1Layer*) sharedGameLayer
{
NSAssert(sharedGameLayer != nil, @"shared game layer not there yet");
return sharedGameLayer;
}
在初始化时,我初始化游戏对象
-(id) init
{
if ((self = [super init]))
{
sharedGameLayer = self;
GameObject1* gameObject1 = [GameObject1 gameObject1];
fish1.position = CGPointMake(0, 0);
fish1.tag = kFish1TagValue;
[self addChild:gameObject1 z:10];
}
return self;
}
在游戏对象中(这是一个节点,但基本上是一个 ccsprite)
+(id) gameObject1{
return [[self alloc] initWithFish1Image];
}
-(id) initWithFish1Image {
if ((self = [super init])) {
CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"fish1atlas.plist"];
sceneSpriteBatchNode = [CCSpriteBatchNode batchNodeWithFile:@"fish1atlas.png"];
[self addChild:sceneSpriteBatchNode z:0];
fish1Sprite = [[CCSprite alloc] initWithSpriteFrameName:@"fish1_normal_1.png"];
fish1Sprite.tag = kFish1SpriteTag;
fish1Sprite.rotation = -30;
[self addChild:fish1Sprite];
}
return self;
}
我的问题是,我试图从 GameObject 中向 GameLayer1 发送消息。如果我包含 GameLayer1.h,则参数会变为循环,并且会出现未声明的标识符混淆。如果我只是尝试:[GameLayer1 sharedGameLayer] methodImTrying]; 它没有重新计算,我得到一个未声明的标识符。
我尝试添加:@class GameLayer1; 当我向 GameLayer 发送消息时,“类消息是前向声明”失败。
[self.parent 方法]; 和 [超级方法] 都失败了。
我认为使用共享层将允许我访问父节点,而无需在游戏对象中导入游戏层的标头。我知道这是objective-c的一个基本问题,任何帮助将不胜感激。
更新:
如果我将 GameLevel1Layer.h 导入 GameObject 的标头并将 @class GameObject 添加到 GameLayer,我可以调用 [GameLevel1Layer sharedGameLayer] 方法];我想知道我这样做是否完全错误。