2011-11-09 102 views
0

我正在考慮開發一個遊戲,其中兩個玩家在「世界」中相互對戰,但每個人都有自己的角色(分屏)後的視口,但我不知道如何實現它。這是給Cocos2d的。Cocos2d上的分割屏幕

理想情況下,遊戲事件將發生在它自己的CCLayer中,並且代碼只是將它的不同部分繪製到不同的視口上。但是,這對於Cocos2d來說似乎不可行。

我想過的另一個解決方案是有兩個不同的層,並保持每個層同步。這將工作,並更容易實現視口代碼,但似乎不可擴展。

我最後的想法是重寫遊戲圖層的繪製代碼並使用OpenGL函數手動繪製,但我不知道從哪裏開始。

這樣做的最好方法是什麼?

回答

1

好吧,經過多一點研究,我發現this thread它使用glViewport設置視口,然後調用[super visit]爲每個視口。

但是,這並不適合我,因爲出於某種原因,每個視口的圖像都被拉伸了 - 我猜視口已經搞亂了Cocos2d的內部。

我通過定位圖層幾乎完全使用Cocos2d函數來重做視口,調用[super visit]並重新定位並再次調用[super visit]。通過這種與glScissor結合,我可以模仿視

以供將來參考,下面是我用的代碼片段:

-(void) visit 
{ 
    glEnable(GL_SCISSOR_TEST); 
    glPushMatrix(); 

    CGPoint point = ((CCNode*)[toFollow objectAtIndex:1]).position; 
    self.anchorPoint = ccp(point.x/self.contentSize.width, point.y/self.contentSize.height); 
    self.rotation = 180.0f; 

    point = ((CCNode*)[toFollow objectAtIndex:1]).position; 
    self.position = ccpAdd(ccp(bounds.width/2,bounds.height/4*3),ccp(-point.x, -point.y)); 
    glScissor(0,bounds.height/2,bounds.width,bounds.height/2); 
    [super visit]; 

    glPopMatrix(); 


    glPushMatrix(); 
    self.anchorPoint = CGPointZero; 
    self.rotation = 0.0f; 

    point = ((CCNode*)[toFollow objectAtIndex:0]).position; 

    self.position = ccpAdd(ccp(bounds.width/2,bounds.height/4),ccp(-point.x, -point.y)); 
    glScissor(0,0,bounds.width,bounds.height/2); 
    [super visit]; 

    glPopMatrix(); 
    glDisable(GL_SCISSOR_TEST); 
    //self.rotation = 0.0f; 
    //[super visit]; 
} 
+1

您可以上傳一個示例項目。我不確定如何將此代碼用於分屏。 – mikeytdan

+0

您可以在包含所有遊戲對象的CCLayer中使用此代碼。我找不到原來的項目,我很遺憾地使用這個項目 – tangrs

+0

@tangrs什麼包含'toFollow'數組? – dwbrito