2016-06-12 2 views
0

Récemment, j'ai décidé de créer un nouveau jeu et de donner cette chance au framework libgdx. Il y a longtemps, je faisais des jeux dans Slick2D, et je me souviens que leur approche en ce qui concerne les objets update (delta) et draw() était différente, alors maintenant dans libgdx qui n'a que render (delta). Donc, je suis venu à l'idée, de jeu abstrait, et de faire ma propre classe de jeu et de l'écran avec mise à jour & dessiner. Cependant, maintenant je suis dans le doute concernant le paramètre delta de la méthode de rendu. En regardant quelques exemples sur internet concernant libgdx avec la mise à jour du concept d'implémentation et le dessin, les gens passaient le paramètre delta de la méthode render à la fois pour mettre à jour et dessiner les méthodes. De cette description, mes questions sont:doutes sur l'implémentation de l'approche différente de la méthode render dans libgdx

  1. Est-ce correct d'implémenter le concept de mise à jour et de dessiner des méthodes?
  2. Dois-je passer delta parametar pour dessiner la méthode?
  3. Si dans la metod de mise à jour (delta) je fais des calculs, quel est le but ou les cas d'utilisation de delta parametar dans la méthode draw?

Répondre

1
  1. Oui, il est généralement une bonne idée de separate concerns. Si votre boucle de jeu existe uniquement pour mettre à jour la logique du jeu et l'état du jeu de dessin, alors ces méthodes seraient bonnes. Lorsque votre jeu se développe, vous devrez peut-être ajouter des étapes supplémentaires (comme plusieurs passes de rendu, la synchronisation de plusieurs parties, etc.).
  2. Vous n'avez généralement besoin que de l'heure delta lors de la mise à jour de la logique du jeu, pas lors du rendu. Mais si vous en avez besoin, alors c'est bien de le passer en argument.
  3. Il est de temps, en secondes, depuis la dernière fois que la méthode de rendu a été appelée. Vous l'utilisez pour mettre à jour votre logique de jeu dans une matière indépendante du taux de trame. Par exemple. calculate la bonne position de votre personnage, le correct frame d'un animation, etc.

Notez que tout en prenant le temps en l'état delta peut provoquer par exemple se téléporter sur des hick-ups et n'est pas discret. Par conséquent, il est généralement recommandé de limiter la valeur (par exemple delta = Math.min(delta, 1/30f);). L'utilisation d'un fixed time step est souvent utilisée lorsque vous avez besoin que votre logique de jeu soit discrète.

+0

J'ai une autre question offtopic, dois-je utiliser SpriteBatch de libgdx dans le jeu entier ou par classe d'écran? – Kapparino

+0

Peu importe, mais puisque SpriteBatch utilise des ressources opengl natives, il est légèrement préférable de les réutiliser plutôt que de les recréer. Soyez conscient * pas * d'utiliser 'static' pour ça. – Xoppa

+0

Je pensais, au sujet de passer cela comme un parametar à la méthode de tirage, et l'utiliser à travers le jeu entier, au lieu de définir un attribut de celui-ci dans chaque classe. – Kapparino

0

Vous pouvez utiliser package Scene2d de LibGDX:

https://github.com/libgdx/libgdx/wiki/Scene2d

La classe Stage ne fournit acte et aspirez méthodes. Ainsi, la méthode render() dans la classe de jeu finit par ressembler à ceci:

@Override 
public void render() {  
    Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1.0f); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(); 
    stage.draw(); 
}