2013-03-17 65 views
3

我想將cocos2d集成到我的視圖中。所以,我有一個正常的視圖控制器(MapEditorViewController)和觀點,在我的視圖控制器,(我創建了一個IBOutlet UIView *openGLView)中,我想cocos2d的是在我的視圖控制器,我有一個方法setupCocos2D:Cocos2D - 圖層背景顏色不變

- (void)setupCocos2D { 
    CCGLView *glView = [CCGLView viewWithFrame:self.openGLView.bounds 
            pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8 
            depthFormat:0      // GL_DEPTH_COMPONENT16_OES 
         ]; 
    glView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    [self.openGLView insertSubview:glView atIndex:0]; 
    [[CCDirector sharedDirector] setOpenGLView:glView]; 
    CCScene *scene = [HelloWorldLayer scene]; 
    [[CCDirector sharedDirector] runWithScene:scene]; 
} 

setupCocos2D在類別MapEditorViewControllerviewDidLoad中被調用。

我有一個層(HelloWorldLayer),這基本上是在http://www.raywenderlich.com/25736/how-to-make-a-simple-iphone-game-with-cocos2d-2-x-tutorial

// Helper class method that creates a Scene with the HelloWorldLayer as the only child. 
+(CCScene *) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *scene = [CCScene node]; 

    // 'layer' is an autorelease object. 
    HelloWorldLayer *layer = [HelloWorldLayer node]; 

    // add layer as a child to scene 
    [scene addChild: layer]; 

    // return the scene 
    return scene; 
} 

- (void) addMonster { 

    CCSprite * monster = [CCSprite spriteWithFile:@"backbutton.png"]; 

    // Determine where to spawn the monster along the Y axis 
    CGSize winSize = [CCDirector sharedDirector].winSize; 
    int minY = monster.contentSize.height/2; 
    int maxY = winSize.height - monster.contentSize.height/2; 
    int rangeY = maxY - minY; 
    int actualY = (arc4random() % rangeY) + minY; 

    // Create the monster slightly off-screen along the right edge, 
    // and along a random position along the Y axis as calculated above 
    monster.position = ccp(winSize.width + monster.contentSize.width/2, actualY); 
    [self addChild:monster]; 

    // Determine speed of the monster 
    int minDuration = 2.0; 
    int maxDuration = 4.0; 
    int rangeDuration = maxDuration - minDuration; 
    int actualDuration = (arc4random() % rangeDuration) + minDuration; 

    // Create the actions 
    CCMoveTo * actionMove = [CCMoveTo actionWithDuration:actualDuration 
               position:ccp(-monster.contentSize.width/2, actualY)]; 
    CCCallBlockN * actionMoveDone = [CCCallBlockN actionWithBlock:^(CCNode *node) { 
     [node removeFromParentAndCleanup:YES]; 
    }]; 
    [monster runAction:[CCSequence actions:actionMove, actionMoveDone, nil]]; 

} 

// on "init" you need to initialize your instance 
-(id) init 
{ 
    // always call "super" init 
    // Apple recommends to re-assign "self" with the "super's" return value 
    if((self=[super initWithColor:ccc4(255,0,255,255)])) { 

     CGSize winSize = [CCDirector sharedDirector].winSize; 
     CCSprite *player = [CCSprite spriteWithFile:@"carteIntrouvable.png"]; 
     player.position = ccp(player.contentSize.width/2, winSize.height/2); 
     [self addChild:player]; 


     [self setIsTouchEnabled:YES]; 

     [self schedule:@selector(gameLogic:) interval:1.0]; 

      } 
    return self; 
} 

-(void)gameLogic:(ccTime)dt { 
    [self addMonster]; 
} 

現在的教程中的代碼,我不知道我做錯了,該層出現,但它是黑色,即使我更改-(id) init中的線initWithColor

如何更改圖層的背景顏色,因爲如果我不將cocos2d與UIKit集成在一起,代碼將起作用...?

+0

是你的init被調用嗎? – YvesLeBorg 2013-03-17 18:49:35

+0

是的,我證實了這一點。 – CoachNono 2013-03-17 18:51:10

+0

您是否將HelloWorldLayer更改爲子類CCLayerColor? – bvogelzang 2013-03-17 19:03:01

回答

6

替代解決方案:將CCLayerColor添加到基礎圖層。

-(void) onEnter 
{ 
    [super onEnter]; 
    ccColor4B color = {255,255,0,255}; 
    CCLayerColor *colorLayer = [CCLayerColor layerWithColor:color]; 
    [self addChild:colorLayer z:LAST_LAYER_PLUS_1]; 
} 
+0

它不起作用... – CoachNono 2013-03-17 18:53:35

+0

把這個功能放在onEnter方法...然後它應該工作...確保你把正確的z-orering .. – Guru 2013-03-17 18:56:30

+1

好!解決了它,我把它放在init中! – CoachNono 2013-03-17 19:02:38