Bien le bonjour à tous.
J'ai commencer à faire un petit moteur graphique pour gérer la lumière dans un jeu 2D.
Ce petit bout de code marche bien mais trop lentement.
Surement que ma façon de le concevoir n'est pas la bonne.
Voila comment il est fait:
1- Je créé un objet World qui contient:
Puis je le lance avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 protected static Graphics2D calqueLum; protected static BufferedImage bufferedCalqueLum;
2- Je créé un objet Light qui hérite de World.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void Start(){ bufferedCalqueLum = new BufferedImage(Frame.frameWidth, Frame.frameHeight, BufferedImage.TYPE_INT_ARGB ); calqueLum = bufferedCalqueLum.createGraphics(); }
Avec sa méthode AddLight je dessine dans "calqueLum" un cercle avec des triangles dont la couleur opaque au centre devient translucide en s'évasant.
3- Et pour finir, dans World.DisplayLight() j'inverse l'alpha de tout les pixels avec:
Sachant que bufferedCalqueLum.getHeight() vaut 1080 et que bufferedCalqueLum.getWidth() vaut 1920 sa fait beaucoup de pixels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void DisplayLight(){ for(int x = 0, y = 0; x < bufferedCalqueLum.getWidth(); x++){ for(; y < bufferedCalqueLum.getHeight(); y++){ Color nuitColor = new Color(bufferedCalqueLum.getRGB(x, y), true); Color rgba = new Color(nuitColor.getRed(), nuitColor.getGreen(), nuitColor.getBlue(), (255 - nuitColor.getAlpha())); bufferedCalqueLum.setRGB(x, y, rgba.getRGB()); } y = 0; } Image imagecalqueLum = Toolkit.getDefaultToolkit().createImage(bufferedCalqueLum.getSource()); Panel.feuille.drawImage(imagecalqueLum, 0, 0, null); calqueLum.dispose(); }
Du coup il me faudrait surement une autre idée.
Merci de votre aide.
Partager