I am wanting to create a base class that inherits from CCLayer. My reason is because I have a single-image, full screen CCSprite that I want to overlay on every scene of my application. Creating a base class, and adding a CCSprite containing the image as the top-most Z object seems to make sense because it will prevent me from having to re-code the same overlay implementation again and again for each scene.
I’ve been able to derive a class from CCLayer with relative ease. However, I cannot figure out how to correctly create a scene another layer class that is a child, of a child of CCLayer. How can this be done, and work?
I understand that when most users ask such questions, the first follow is “Show us your code.” I can show you the code but I am most interested in is a very generic implementation of Cocos2d object, that is derived from CClayer and can be used as a base class for other layers, pre-wiring common sprites and objects.
I think this may be your problem:
As I understand it, Cocos layers are added as children to Cocos scenes, not the other way around, as the quote seems to imply.
I think you could simply make a custom layer class, deriving it from CCLayer and adding your CCSprite. Then simply go to everywhere you are creating or deriving a CCLayer and instead create or derive it from your custom layer class and then show or hide the sprite when needed.
Alternatively, and probably more easily, you could create a category on CCLayer adding a “showFullscreenSprite” method which simply creates the sprite and sets its image, then calls
You would also need a corresponding “hideFullscreenSprite” method which would simply do this
The nice thing about this approach is you wouldn’t need to sub-class at all and all of your CCLayers would now have your “showFullscreenSprite” and “hideFullscreenSprite” methods available.
(Note: “9999” has to be some number you’re not already using as a CCNode tag. Make it big enough so you don’t have to worry about it. Maybe pull it out into a constant such as “FULL_SCREEN_SPRITE_TAG” or some such for readability.)
Hope this helps!