Que dois-je utiliser pour afficher les graphismes du jeu?


J'ai un système en place pour un jeu mais je ne sais pas ce que je devrais utiliser pour l'afficher. Je fais un jeu de tir vertical et j'ai écrit les méthodes pour toutes les classes contrôlant les ennemis et les joueurs, mais je ne sais pas comment afficher efficacement le jeu. Je pensais à une toile, qui repeindrait chaque cadre, mais est-ce vraiment la méthode la plus efficace?

Détails Importants:

  1. framerate idéal: 25fps
  2. C'est un 2d jeu
  3. Il y a entre 25 et 100 objets sur l'écran à la fois, qui sont tous en mouvement
  4. Tous les objets affichés sont des images, tous au format PNG
  5. La fenêtre est 640px par 480px
  6. En ce moment, toutes les images sont chargées en tant que BufferedImage, bien que je puisse facilement changer cela

7. J'ai besoin des coordonnées de l'avion. C'est la seule partie fondamentale qui ne peut pas être modifiée sans restructurer complètement mon code.

Plus surtout, la façon dont j'ai tout mis en place, chaque image tous les objets se déplacent et interagissent dans un plan de coordonnées que j'ai conçu (traite de la détection de collision et du mouvement, pas de composant graphique), alors tout devrait être peint à l'écran, simplement en passant par les ArrayLists qui gardent une trace de tous

Author: Will, 2011-06-06

4 answers

Si Swing est acceptable, JPanel est double-tamponné par défaut, et un javax.swing.Timer avec une période de 40 ms vous donnera ~25 Hz mises à jour. Ce exemple montre l'approche de base, alors que cette exemple montre un certain nombre d'images en mouvement.

J'ai besoin d'un plan de coordonnées.

Il n'est pas rare que le modèle et la vue utilisent des coordonnées différentes; tout ce qui est nécessaire sont des fonctions pour mapper un système à l'autre. Dans ce jeu , la vue repose sur quatre méthodes qui mapper les tuiles en pixels et vice-versa. La même approche est décrite ici pour les tuiles de carte.

 4
Author: trashgod, 2018-11-09 17:33:42

Vous avez un certain nombre d'options à votre disposition:

Tout d'abord, vous pouvez utiliser l'un des frameworks de jeu Java existants:

  1. JMonkeyEngine (http://jmonkeyengine.com/)
  2. Lisse (http://slick.cokeandcode.com/index.php)

(Slick est destiné aux graphiques 2D, tandis que JMonkey est destiné à la 3D et utilise OpenGL-Bien que j'aie examiné leur utilisation, je ne les ai pas réellement utilisés moi-même)

Alternativement, vous pouvez tout coder vous-même. Des sons des choses ceci est votre premier jeu (graphique), vous voudrez peut-être lire sur une technique connue sous le nom de double mise en mémoire tampon, par laquelle vous écrivez chaque image hors écran et la peinture juste le tout à l'écran, car cela peut conduire à une animation plus lisse.

Pour vous mettre un peu plus dans le développement de jeux, je vous recommande vivement de lire ce site, Killer Programmation de jeux en Java par le Dr Andrew Davison, car il donne de bons conseils, et fournit également un bon chemin d'apprentissage progressif pour nouveaux développeurs de jeux, et les déplacer dans le développement 2D puis 3D.

HTH

 3
Author: Crollster, 2011-06-06 02:13:26

La réponse dépend vraiment si ce jeu est 2D ou 3D.

Si votre jeu est en 2D, un moyen facile de faire ce que vous voulez est d'utiliser la propre API graphique 2D de Java. Un bon tutoriel pour commencer (au moins à mon avis) peut être trouvé à Les tutoriels Java. Dans mon expérience, j'ai trouvé que l'API graphique de Java est facile à apprendre et est plus efficace que ce à quoi on pourrait s'attendre. La technique de base est d'avoir votre code de jeu garder une trace des positions de tous vos objets, puis traduisez ces coordonnées en coordonnées d'écran et affichez les images appropriées à ces endroits. J'ai fait un jeu (très, très simple) en Java une fois, et c'est la méthode que j'ai utilisée.

Si votre jeu est en 3D, OpenGL est définitivement la voie à suivre. Je n'ai qu'une expérience limitée avec OpenGL, donc je ne sais pas à quel point les liaisons Java sont faciles à utiliser. En général, la programmation 3D est un sujet massif, donc si c'est un projet pour la première fois ou si vous n'êtes pas préparé pour un investissement de temps important, je le ferais essayez de trouver un bon framework de jeu pour utiliser ou rendre le jeu 2D. Si vous êtes intéressé par OpenGL, ou la programmation 3D en général, un rapide Google a tourné le projet JOGL. Je recommanderais d'enquêter sur JOGL comme moyen d'accéder à l'API OpenGL à partir du code Java, mais pour apprendre réellement OpenGL, je recommande Le SuperBible OpenGL(5ème édition), communément appelé "Le Livre bleu". Les exemples de code sont tous en C++, mais pour les fonctions OpenGL, il pourrait être juste un question d'utiliser une bibliothèque wrapper. Par exemple:

glDrawElements(...);

Peut devenir:

JavaGLWrapperObject.glDrawElements(...);

Malheureusement, je ne peux pas donner d'exemples concrets car je n'ai pas utilisé OpenGL avec un programme Java, mais l'exemple ci-dessus se rapproche très grossièrement de la façon dont OpenGL ES est utilisé sur la plate-forme Android.

En ce qui concerne la performance... L'API de Java est livrée avec une quantité non triviale de frais généraux, mais je pouvais le voir bien pour vos besoins. Vous devrez peut-être mettre un peu plus d'efforts dans la fabrication de votre des algorithmes efficaces, et votre jeu peut ne pas fonctionner aussi bien sur du matériel compatible. Si vous décidez de suivre la route OpenGL, ce sera presque certainement beaucoupplus rapide (encore une fois, en fonction de l'efficacité de vos algorithmes), mais il est en conséquence beaucoup plus difficile à apprendre et à démarrer. Certainement faisable, mais il va être tout un défi.

 2
Author: rjacks, 2011-06-06 01:54:29

Canvas sera rapidement trop lent pour 25+ fps ciblés.

Le nombre d'objets n'est pas pertinent, ce qui est est à quel point ils sont complexes.

Si c'est 100 images ne prendront rien par rapport à 1 modèle 3D d'Avatar par exemple.

En Java, vous pouvez utiliser Opengl ou Java3D

J'aurais tendance à aller avec Opengl comme un choix personnel

 0
Author: Jason Rogers, 2011-06-06 01:21:41