my question is about communicating two directions from one class to its child.
I have a GameLayer CCLayer with a child GameObject CCNode. The GameLayer is a semi-singleton shared layer. I need to import in GameLayer's header the GameObject.h to be able to init the GameObject. I am now trying to communicate back to the gamelayer and I'm stuck. THe code all works until the questions.
static GameLevel1Layer* sharedGameLayer;
+(GameLevel1Layer*) sharedGameLayer
{
NSAssert(sharedGameLayer != nil, @"shared game layer not there yet");
return sharedGameLayer;
}
On init, I init the GameObject
-(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;
}
in game object (which is a node but basically inits a 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;
}
My problem is that from within GameObject I'm trying to send a message to GameLayer1. If I include GameLayer1.h the argument gets circular and I get an undeclared identifier confusion. If I just try: [GameLayer1 sharedGameLayer] methodImTrying]; It doesnt recgonize and I get an undeclared identifier.
I tried adding: @class GameLayer1; and when I send a message to GameLayer it fails that "class message is a forward declaration".
[self.parent method]; and [super method] both fail.
I thought using a shared layer would allow me to access the parent node without having to import the header for the gamelayer in the gameobject. I know this is a basic question of objective-c, any help would be appreciated.
UPDATE:
If I instead import GameLevel1Layer.h into GameObject's header and add the @class GameObject to GameLayer, I can call [GameLevel1Layer sharedGameLayer] method]; i wonder if i'm doing this all quite wrong.