Salut tout le monde,
J’essaie de faire une anim° en java et il se trouve que je rencontre quelques difficultés…
Je dispose d’une liste de couleurs (instances de Color
) à laquelle j’accède depuis ma classe abstraite Colors
et actuellement j’essaie de remplir une ligne de pixels (de coordonnée y=6) avec. Voici ci-dessous le code correspondant.
public static void main(String args[]) {
Gui gui = new Gui();
gui.setUp("DOOM-like fire", 400, 400);
gui.setVisible(true);
Colors colors = new FireColors(new ArrayList<>());
gui.colorize(colors.getColorAtIndex(5), 6);
}
La méthode colorize
fonctionne comme suit :
void colorize(Color color, int y_parameter) {
for(int y = (y_parameter == -1 ? 0 : y_parameter); y <= (y_parameter == -1 ? this.getHeight() - 1 : y_parameter); y++) {
for(int x = 0; x < this.getWidth(); x++) {
buffered_image.setRGB(x, y, color.getRGB());
System.out.println(y + " " + x + " " + color.getRGB());
}
}
repaint();
}
public void paint(Graphics graphics) {
super.paint(graphics);
graphics.drawImage(buffered_image, 0, 0, null);
}
Lors de l’exécution, j’obtiens bien les bonnes coordonnées x et y, ainsi que -8970489 (qui correspond au .getRGB()
. Donc de ce côté c’est tout bon.
Vous voyez que j’utilise la variable buffered_image
pour colorier les pixels de mon canvas. Cette variable n’est affectée qu’une seule fois lors de l’exécution du programme : au moment où setUp
est appelée, jamais autrement. Donc c’est toujours la bonne instance de BufferedImage
qui est utilisée.
Pourtant, jamais je ne vois les pixels se colorier dans la ligne de coordonnée y=6. Pourquoi ?
Code complet
Vous pouvez tester le programme .
Launcher.java
import java.util.ArrayList;
public class Launcher {
public static void main(String args[]) {
Gui gui = new Gui();
gui.setUp("DOOM-like fire", 400, 400);
gui.setVisible(true);
Colors colors = new FireColors(new ArrayList<>());
gui.colorize(colors.getColorAtIndex(5), 6);
}
}
Gui.java
import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
class Gui extends JFrame {
private BufferedImage buffered_image;
void setUp(String title, int width, int height) {
this.setTitle(title);
this.setLayout(null);
this.setSize(width, height);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.buffered_image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
}
void colorize(Color color, int y_parameter) {
for(int y = (y_parameter == -1 ? 0 : y_parameter); y <= (y_parameter == -1 ? this.getHeight() - 1 : y_parameter); y++) {
for(int x = 0; x < this.getWidth(); x++) {
buffered_image.setRGB(x, y, color.getRGB());
System.out.println(y + " " + x + " " + color.getRGB());
}
}
repaint();
}
public void paint(Graphics graphics) {
super.paint(graphics);
graphics.drawImage(buffered_image, 0, 0, null);
}
}
Colors.java
import java.awt.Color;
import java.util.List;
abstract class Colors {
List<Color> colors;
Color getColorAtIndex(int index) {
return colors.get(index);
}
}
FireColors.java
import java.awt.Color;
import java.util.List;
class FireColors extends Colors {
FireColors(List<Color> colors) {
this.colors = colors;
this.colors.add(new Color(7, 7, 7));
this.colors.add(new Color(47, 15, 7));
this.colors.add(new Color(71, 15, 7));
this.colors.add(new Color(87, 23, 7));
this.colors.add(new Color(103, 31, 7));
this.colors.add(new Color(119, 31, 7));
this.colors.add(new Color(143, 39, 7));
this.colors.add(new Color(159, 47, 7));
this.colors.add(new Color(175, 63, 7));
this.colors.add(new Color(191, 71, 7));
this.colors.add(new Color(199, 71, 7));
this.colors.add(new Color(223, 79, 7));
this.colors.add(new Color(223, 87, 7));
this.colors.add(new Color(223, 87, 7));
this.colors.add(new Color(215, 95, 7));
this.colors.add(new Color(215, 103, 15));
this.colors.add(new Color(207, 111, 15));
this.colors.add(new Color(207, 119, 15));
this.colors.add(new Color(207, 127, 15));
this.colors.add(new Color(207, 135, 23));
this.colors.add(new Color(199, 135, 23));
this.colors.add(new Color(199, 143, 23));
this.colors.add(new Color(199, 151, 31));
this.colors.add(new Color(191, 159, 31));
this.colors.add(new Color(191, 159, 31));
this.colors.add(new Color(191, 167, 39));
this.colors.add(new Color(191, 167, 39));
this.colors.add(new Color(191, 175, 47));
this.colors.add(new Color(183, 175, 47));
this.colors.add(new Color(183, 183, 47));
this.colors.add(new Color(183, 183, 55));
this.colors.add(new Color(207, 207, 111));
this.colors.add(new Color(223, 223, 159));
this.colors.add(new Color(239, 239, 199));
this.colors.add(new Color(255, 255, 255));
}
}