If I use something like "scrollLayer.scale = 0.5;" , it gives me a blank screen. I just found that if I use something like "self.scale = 0.5;" then it works and scales everything to half size OK. The problem with that is I need to only scale a particular child layer, not everything in the scene.
Here's what I'm seeing:
If I add "self.scale = 0.5;" only to MenuScoresScene implementation, then it scales everything only in MenuScoresScene implementation.
If I add "self.scale = 0.5;" only to MenuScoresLayer implementation, then it scales everything only in MenuScoresLayer implementation.
If I add "self.scale = 0.5;" to both MenuScoresScene implementation and MenuScoresLayer implementation, then it scales everything in both MenuScoresScene implementation and MenuScoresLayer implementation.
If I add "scrollLayer.scale = 0.5;" only to MenuScoresLayer implementation, then I get a blank screen for MenuScoresLayer implementation.
Here's the code I'm using for a scene that I've been testing this with. I'm using this as an example to figure out how I can scale only a particular child layer that has sprites and menuitems on it.
MenuScoresScene.h
#import "cocos2d.h"
@interface MenuScoresScene : CCScene
{
}
@end
@interface MenuScoresLayer : CCLayer
{
CCLayer *scrollLayer;
}
-(void)backpage: (id)sender;
@end
MenuScoresScene.m
// Import the interfaces
#import "MenuScene.h"
#import "MenuOptionsScene.h"
#import "MenuScoresScene.h"
#import "SimpleAudioEngine.h"
#import "GlobalDataManager.h"
// Menu Game Scores implementation
@implementation MenuScoresScene
- (id) init
{
self = [super init];
if (self != nil)
{
CCSprite * bg = [CCSprite spriteWithFile:@"screen_3_320x480_022710.png"];
[bg setPosition:ccp(240, 160)];
[self addChild:bg z:0];
[self addChild:[MenuScoresLayer node] z:1];
//
//
#if LITEVERSION
CCLabel* litelabel = [CCLabel labelWithString:@"Lite" fontName:@"Marker Felt" fontSize:22];
[self addChild:litelabel z:1];
litelabel.color = ccc3(212, 179, 148); // text color setting to light tan
[litelabel setPosition:CGPointMake(375, 265)];
#endif
}
return self;
}
@end
@implementation MenuScoresLayer
- (id) init
{
self = [super init];
if (self != nil)
{
// main scrolling layer
scrollLayer = [[CCLayer alloc] init];
scrollLayer.anchorPoint = ccp( 240, 160 );
scrollLayer.position = ccp( 0, 0 );
[self addChild:scrollLayer z:2];
//
//
// add the 3 highest scores to the screen
// highest score
CCLabel* score1 = [CCLabel labelWithString:@"1,234,567" fontName:@"Marker Felt" fontSize:20];
[scrollLayer addChild:score1 z:3];
[score1 setPosition:CGPointMake(120, 198)];
score1.color = ccc3(249, 179, 29); // text color setting to yellow
[score1 setAnchorPoint: ccp(0, 0.5f)]; // left align label text
// second highest score
CCLabel* score2 = [CCLabel labelWithString:@"1,034,567" fontName:@"Marker Felt" fontSize:20];
[scrollLayer addChild:score2 z:3];
[score2 setPosition:CGPointMake(120, 173)];
score2.color = ccc3(249, 179, 29); // text color setting to yellow
[score2 setAnchorPoint: ccp(0, 0.5f)]; // left align label text
// third highest score
CCLabel* score3 = [CCLabel labelWithString:@"934,567" fontName:@"Marker Felt" fontSize:20];
[scrollLayer addChild:score3 z:3];
[score3 setPosition:CGPointMake(120, 146)];
score3.color = ccc3(249, 179, 29); // text color setting to yellow
[score3 setAnchorPoint: ccp(0, 0.5f)]; // left align label text
// add the 3 highest levels achieved to the screen
// highest level
CCLabel* scorelevel1 = [CCLabel labelWithString:@"Level 12" fontName:@"Marker Felt" fontSize:20];
[scrollLayer addChild:scorelevel1 z:3];
[scorelevel1 setPosition:CGPointMake(120, 73)];
scorelevel1.color = ccc3(249, 179, 29); // text color setting to yellow
[scorelevel1 setAnchorPoint: ccp(0, 0.5f)]; // left align label text
// second highest level
CCLabel* scorelevel2 = [CCLabel labelWithString:@"Level 10" fontName:@"Marker Felt" fontSize:20];
[scrollLayer addChild:scorelevel2 z:3];
[scorelevel2 setPosition:CGPointMake(120, 47)];
scorelevel2.color = ccc3(249, 179, 29); // text color setting to yellow
[scorelevel2 setAnchorPoint: ccp(0, 0.5f)]; // left align label text
// third highest level
CCLabel* scorelevel3 = [CCLabel labelWithString:@"Level 8" fontName:@"Marker Felt" fontSize:20];
[scrollLayer addChild:scorelevel3 z:3];
[scorelevel3 setPosition:CGPointMake(120, 21)];
scorelevel3.color = ccc3(249, 179, 29); // text color setting to yellow
[scorelevel3 setAnchorPoint: ccp(0, 0.5f)]; // left align label text
//
// add the back button compass
CCMenuItemImage *backpage = [CCMenuItemImage itemFromNormalImage:@"compass_030610.png" selectedImage:@"compass2_030610.png" target:self selector:@selector(backpage:)];
CCMenu *menu = [CCMenu menuWithItems:backpage, nil];
backpage.position = ccp(-190,113); // position the back button image
[scrollLayer addChild:menu z:4];
//
// add the text label to the back button
CCLabel* backpagetext = [CCLabel labelWithString:@"Back" fontName:@"Marker Felt" fontSize:22];
[scrollLayer addChild:backpagetext z:5];
[backpagetext setPosition:CGPointMake(51, 265)];
backpagetext.color = ccc3(212, 179, 148); // text color setting to light tan
//
}
return self;
}
-(void)backpage: (id)sender
{ // go back to the main menu
// NSLog(@"backpage1");
if ([GlobalDataManager sharedDataManager].soundfxOn == YES ) // if sound effects are enabled
{
[[SimpleAudioEngine sharedEngine] playEffect:@"click_on_033010.wav"]; // play a click sound when button pressed
}
MenuOptionsScene * mos = [MenuOptionsScene node];
[[CCDirector sharedDirector] replaceScene:mos];
}
// on "dealloc" you need to release all your retained objects
- (void) dealloc
{
// in case you have something to dealloc, do it in this method
// in this particular example nothing needs to be released.
// cocos2d will automatically release all the children (Label)
// don't forget to call "super dealloc"
[super dealloc];
}
@end