2011-11-09 13 views
0

私は、2人のプレイヤーが「世界」でお互いに対戦しているが、それぞれにキャラクター(分割画面)の後ろに独自のビューポートがあるゲームを開発しようと考えていますが、 。これはCocos2d用です。Cocos2dの画面を分割する

理想的には、ゲームイベントは独自のCCLayerで発生し、コードは単に異なるビューポートに異なるセクションを描画します。しかし、これはCocos2dでは可能ではないようです。

私が考えていたもう1つの解決策は、2つの異なるレイヤーを持ち、それぞれを同期させておくことでした。それは機能し、ビューポートコードを実装するのが簡単になりますが、スケーラブルではありません。

私が最後にしたアイデアは、ゲームレイヤーの描画コードをオーバーライドし、手動でOpenGL関数を使用して描画することでしたが、どこから開始するのかわかりませんでした。

これを行うにはどうすればよいでしょうか?

答えて

1

よしは、もう少し研究の後、私は、ビューポートを設定するにはglViewportを使用するthis threadを発見し、各ビューポートのための[super visit]を呼び出します。

しかし、何らかの理由で各ビューポートの画像が伸びていたため、うまくいきませんでした。ビューポートがCocos2d内部の何かを混乱させていたと思います。

レイヤーを配置して[super visit]を呼び出し、[super visit]を再度配置して呼び出すことで、Cocos2d関数を使ってほぼ完全にビューポートをやり直すことになりました。

-(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

を使用すると、サンプルプロジェクトをアップロードすることができます:glScissorでこれを組み合わせることで、私は今後の参考のためにビューポート

を模倣することができ、ここで私が使用したコードの抜粋です。私はどのように分割画面のためにこのコードを使用するか分からない。 – mikeytdan

+0

このコードは、すべてのゲームオブジェクトを含むCCLayerで使用します。私は残念なことにこれを使用した元のプロジェクトを見つけることができません – tangrs

+0

@tangrs 'toFollow'配列を含むものは何ですか? – dwbrito

関連する問題