[Republier cette question à partir de stackoverflow, car il a été souligné qu'elle s'adapte mieux ici.]
Je porte actuellement mon moteur de jeu 2D sur Java. J'ai regardé certaines des bibliothèques de jeux pointées ici sur stackoverflow. Cependant, ceux que j'ai examinés étaient plutôt simplistes et ne précisaient même pas s'ils prenaient en charge des éléments tels que la transparence alpha, j'ai donc décidé de porter mon rendu C ++ pour lequel j'avais déjà écrit la logique.
Ce moteur de rendu est un moteur de rendu purement logiciel qui utilise la mosaïque pour éviter un nouveau rendu inutile. J'ai optimisé ses performances de défilement en créant un "tampon hors écran" un peu plus grand que mon volet de sortie, et en plaçant ce tampon hors écran sur ma sortie à chaque image. De cette façon, je pouvais éviter de redessiner inutilement les carreaux simplement parce que je faisais défiler un pixel sur la carte.
J'ai utilisé l'AWT de Java pour l'implémenter, en utilisant une grande BufferedImage pour le tampon hors écran. L'utilisation du processeur est correcte (environ deux fois ce que j'avais en C ++), mais il y a un problème étrange avec le défilement continu, où toutes les secondes environ, le moteur de rendu restera en attente pendant environ 0,2 seconde.
Puisqu'il n'y a rien dans mon propre code qui se produirait pendant ces périodes, et puisque les pics disparaissent si je ne dessine pas mon tampon hors écran sur la vue principale, je peux seulement conclure que Java fait sa propre optimisation interne. Cependant, je ne suis pas sûr de ce qu'il fait, et je ne sais pas laquelle de mes propres optimisations je devrais supprimer pour me débarrasser des pointes. En outre, il se peut que java AWT n'ait pas été conçu avec un défilement FPS continu et élevé, et c'est entièrement inutilisable à cette fin.
Y a-t-il un moyen pour moi de me débarrasser de ces pointes?