Libgdx - Comment dessiner un rectangle rempli au bon endroit dans scene2d?
Je suis en utilisant scene2d. Voici mon code:
group.addActor(new Actor() {
@Override
public Actor hit(float arg0, float arg1) {return null;}
@Override
public void draw(SpriteBatch batch, float arg1) {
batch.end();
shapeRenderer.begin(ShapeType.FilledRectangle);
shapeRenderer.setColor(Color.RED);
shapeRenderer.filledRect(0, 0, 300, 20);
shapeRenderer.end();
batch.begin();
}
});
Le problème, c'est qu'il tire cette rectangulaire par rapport à écran (x = 0, y = 0), mais j'ai besoin qu'il soit établi par rapport à mon groupe. Mais si je dessine d'autres entités avec:
batch.draw(texture, 0, 0, width, height);
correctement tirages au (x = 0, y = 0) par rapport à mon groupe (0,0 pixels à partir du coin en bas à gauche du groupe).
Des suggestions comment puis-je mettre en œuvre forme de dessin dans scene2d? Et quelqu'un peut expliquer pourquoi ces deux appels à travailler différemment?
source d'informationauteur Aleksandrs
Vous devez vous connecter pour publier un commentaire.
ShapeRenderer a sa propre matrice de transformation et de matrice de projection. Ceux-ci sont séparés de ceux de la SpriteBatch que le scene2d Étape utilise. Si vous mettez à jour le ShapeRenderer de matrices correspondent à ceux qui scene2d est l'utilisation lors de l' De l'acteur.draw() est appelé alors vous devriez obtenir les résultats que vous voulez.
Que la Tige de Hyde mentionne, ShapeRenderer a sa propre matrice de transformation et de matrice de projection.
Donc, vous auriez à obtenir le SpriteBatch de la Matrice de projection de la première.
Je ne suis pas sûr si il est une manière élégante de le faire, j'ai fait comme ceci:
La meilleure solution pour moi. Cause lorsque vous utilisez ShapeRenderer il ne réagit pas sur le déplacement/zoom de la caméra.
Vous avez besoin de convertir l'Acteur local de coordonnées en coordonnées d'écran. En supposant que le stade est en plein écran, vous pouvez simplement utiliser De l'acteur.localToStageCoordinates:
Où
vec
est un privéVector2d
(vous ne voulez pas attribuer un nouveau à chaque rendu d'appel).C'est aussi en supposant que votre
ShapeRenderer
est la carte en mode plein écran (qui est la valeur par défaut).Aussi, si vous passez loin de la
ShapeRenderer
et de retour à laSpriteBatch
notez que lebatch
est déjà réglée à l'Acteur de coordonnées (et donc vous pouvez utilisergetX()
etgetY()
directement avecbatch.draw(...)
.