LibGDX Stade vs SpriteBatch pour dessiner le Jeu
J'ai un gros problème avec le dessin dans LibGDX. D'abord je n'utilise pas tous la physique ou d'autres compliquer les choses dans mon jeu. Je ne dessiner les sprites et les mettre Rectangles à ce pour la Détection de Collision. J'ai 3 Écrans dans mon jeu: splash, le menu et le jeu. J'utilise donc une Étape dans le démarrage et le menu de l'écran mais je n'ai pas vraiment si j'en Phase d'exploitation dans le jeu ou je dessine avec SpriteBatch? La Scène ont vraiment des pros avec les Actions, mais un peu plus compliquer à utiliser des Acteurs. Il existe d'autres moyens pour ce faire? Je ne veux pas utiliser de Monde, parce que ses compliquer pour le début de la conception de jeux.
Ce que je veux utiliser pour le jeu?
OriginalL'auteur Fabian König | 2014-03-09
Vous devez vous connecter pour publier un commentaire.
En fait, vous avez toujours dessiner avec
SpriteBatch
, commeStage
utilise son propreSpriteBatch
. Si vous pensez que vous pourriez avoir besoin de quelques-uns des avantages deScene2d
sStage
, commeAction
s,Group
s ou d'autres choses, vous devez utiliserStage
. À mon avis, il est vraiment facile à utiliser. Vous avez vos propres objets qui permettent de prolongerImage
ouActor
, remplacer leurupdate(delta)
méthodes, où vous vérifier si laActor
doit se déplacer (Keypressed ou d'un événement pour l'IA). Aussi, vous devez détecter les collisions, il y et prendre soin d'eux. Alors, si vous étendezImage
vous n'avez pas besoin de se soucier de dessin (maisImage
besoinsDrawable
s de sorte que vous aurez quelques problèmes avecAnimation
s), si vous étendezActor
remplacer ladraw(SpriteBatch batch)
, où vous appelezbatch.draw(...)
.Thats it.
Un gros inconvénient de
Stage
est le tri. LeActor
, qui est appelée en tant que premier est en arrière-plan. La dernièreActor
overdraws tous les autres et est au premier plan. Vous pouvez les trier en utilisant le z-Index, mais il n'est pas vraiment sûr.Ainsi, vous pouvez décider d'utiliser votre propre genre de
Stage
(c'est plus ou moins une liste contenant tous lesActor
s, et quandupdate
oudraw
est appelée, elle est appelée à chaqueActor
dans cette liste), et ajouter votre propre tri.Cela dépend de votre conception de jeu, sur votre opinion et votre style. Regarder quelques tutoriels/exemples et de décider comment vous voulez créer votre jeu.
J'utilise Scene2D simplement afin que je puisse utiliser le
EventListener
avec peu ou pas de frais généraux.OriginalL'auteur Springrbua
Vous pouvez utiliser l'un ou l'autre, ça dépend de quel genre de jeu vous êtes en train de créer. Mais de toute façon, ne pas créer plusieurs instances de
SpriteBatch
— au lieu de créer un seul et de le passer àStage
constructeur, parce que c'est un objet lourd. (Oui,Stage
utilise unSpriteBatch
sous le capot)Aussi,
Stage
peut être extrêmement utile si vous avez besoin d'une commandes sur écran (boutons, joystick, etc), parce que vous pouvez utiliser des classes descene2d.ui
et de ne pas réinventer la roue (certaines roues ne sont pas très facile à réinventer correctement)J'ai une question, est en train de faire plusieurs lots.begin() et le lot.fin() coûteux ? Je demande parce que, après vous avez terminé avec spritebatch, vous devez appeler le lot.fin() et dans le code source de la Scène, il demande de lot.begin() et le lot.fin() de nouveau.
Je ne peux pas donner une réponse précise. Il est certainement coûteux, en raison du lot.fin (sans doute, envoie les commandes pour le GPU, mais dans la pratique, il ne fait pas de mal trop s'il est utilisé 2 fois par image, et dans ce cas c'est un mal nécessaire (sinon, on a besoin d'utiliser plus complexe des abstractions, ou faire de dessin sur le niveau inférieur)
OriginalL'auteur Sarge Borsch