beakr
beakr

Reputation: 5857

Cocos2d ColorLayer makes half of the screen go black

I have a standard scene with the init method as follows:

@interface CommodoreScene : CCLayerColor

@end


@implementation CommodoreScene

- (id) init {
    if (( self=[super initWithColor:ccc4(255, 255, 255, 255)] )) {

    }

    return self;
}

@end

However when I run the scene on my iPhone4, or the simulator half the screen goes black, the other half my layer color (white).

I'm currently running the scene with [_director pushScene:[CommodoreScene node]]; and running cocos2d-iphone 2.0.0.

Upvotes: 0

Views: 534

Answers (2)

Corbin87
Corbin87

Reputation: 538

- (id) init {
    if (( self=[super initWithColor:ccc4(255, 255, 255, 255) width:480 height:320] )) {

    }

return self;
}

Try that. The important part is of course the change in the call to super. You might still have an issue with [[CCDirector] winSize] reading properly in the -init method if you're in landscape (which judging from the bug you're experiencing - you are), at least I did on my tests. As I recall, this is a known bug of some kind, as it seems to read the winSize as portrait instead of landscape. You can fix this by doing the following:

CGRect rect = CGRectMake(0, 0, 480, 320);
CGSize size = rect.size;
// position the label on the center of the screen
label.position =  ccp( size.width /2 , size.height/2 );

Using that newly created size instead of winSize in your -init method fixes the issue. Notice that if you create and position an element after initialization, such as in onEnter, this problem goes away and the winSize from the director reads properly. Odd bug, it is.

Upvotes: 1

Guru
Guru

Reputation: 22042

You can change content size of your color layer;

CGSize boxSize = CGSizeMake(sGame.winWidth, sGame.winHeight);
CCLayerColor *box = [CCLayerColor layerWithColor:ccc4(155,155,200,255)];
box.position = ccp(0.0f, 0.0f);
box.contentSize = boxSize;

[self addChild:box z:-6];

Upvotes: 0

Related Questions