2014-07-18 1 views
1

J'ai essayé de dessiner un Group d'acteurs dans une scène, mais je n'ai besoin de les dessiner que dans une zone spécifique de la scène. Par exemple supposons que je divise la scène en 2 parties (gauche et droite), alors je veux dessiner quelques acteurs seulement dans la partie gauche de la scène, donc si l'un d'entre eux va vers la droite, il ne sera pas Être dessiné.Libgdx: dessiner des acteurs dans un rectangle spécifique

Jusqu'à présent, j'ai essayé d'utiliser la méthode setCullingArea mais les acteurs disparaissent soudainement, je veux dessiner une partie d'un acteur si elle est dans la limite. En d'autres termes, je suis à la recherche d'une sorte de zone de masque Group est dessinée.

Merci.

+0

Eh bien vous pouvez faire la détection de collision simple et vérifier si votre acteur (Rectangle) touche le plus au centre de l'écran, alors ne le laissez pas dessiner! –

+0

Mais mon problème est de dessiner une partie d'un acteur si c'est la limite, par exemple si mon acteur est un cercle, quand il est au milieu de l'écran je veux dessiner une moitié de cercle. –

+0

Vous devez vérifier comment vous pouvez configurer deux fenêtres dans un seul écran, puis la caméra orthographique devrait faire l'affaire. –

Répondre

2

Vous pouvez le faire avec des ciseaux, qui coupent le dessin à une zone spécifique de l'écran.

Rectangle leftSide; 
Rectangle rightSide; 

//... 

public void resize(int width, int height){ 
    //... 

    leftSide = new Rectangle(0,0,width/2, height); 
    rightSide = new Rectangle(width/2, 0, width/2, height); 

} 

public void render(){ 
    //... 

    Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST); 
    Gdx.gl.glScissor((int)leftSide.x, (int)leftSide.y, (int)leftSide.width, (int)leftSide.height); 

    //Draw stage with left side actors (set right group invisible) 
    //... 

    Gdx.gl.glScissor((int)rightSide.x, (int)rightSide.y, (int)rightSide.width, (int)rightSide.height); 

    //Draw stage with right side actors (set left group invisible) 
    //... 

    Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST); 

    //... 
} 

Si vous avez d'autres acteurs qui ont besoin d'étendre à travers la frontière, vous pourriez tirer les premiers avant d'activer scissoring, puis les mettre invisibles.

+0

Fonctionne bien! Merci. –

Questions connexes