在Cocos2d上分割屏幕

我正在考虑开发一个游戏,两个玩家在一个“世界”上相互对战,但是每个玩家的angular色(分屏)都有自己的视口,但是我不确定如何实现它。 这是Cocos2d。

理想情况下,游戏事件将发生在自己的CCLayer中,代码只是将不同的部分绘制到不同的视口上。 但是,这似乎不可能与Cocos2d。

我想到的另一个解决scheme是有两个不同的层,并保持每个层同步。 这将工作,更容易实现视口代码,但似乎不可扩展。

我最后的想法是重写游戏层的绘制代码,并使用OpenGL函数手动绘制,但我不知道从哪里开始。

什么是最好的方法来做到这一点?

好了,经过多一点研究,我发现这个线程使用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]; }