1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class Test extends JPanel implements ActionListener{
private List<int[]> mvt_perso1 = new ArrayList<int[]>();
private List<int[]> mvt_perso2 = new ArrayList<int[]>();
private Image img = null;
private int counter;
private Timer timer;
public Test() {
counter = 0;
timer = new Timer(42, this);
readXML();
timer.start();
}
// récupération des informations écrites en dur
// à remplacer par la lecture du xml
private void readXML() {
Random rand = new Random();
// position de départ
mvt_perso1.add(new int[]{200, 200});
// positions suivantes calculées à partir de la précédente + une valeur aléatoire
for(int i = 0 ; i < 500; i++){
mvt_perso1.add(new int[]{mvt_perso1.get(mvt_perso1.size()-1)[0] + (rand.nextInt(5)-2), mvt_perso1.get(mvt_perso1.size()-1)[1] + rand.nextInt(5)-2});
}
mvt_perso2.add(new int[]{200, 200});
for(int i = 0 ; i < 500; i++){
mvt_perso2.add(new int[]{mvt_perso2.get(mvt_perso2.size()-1)[0] + (rand.nextInt(5)-2), mvt_perso2.get(mvt_perso2.size()-1)[1] + rand.nextInt(5)-2});
}
}
public void setBackground(Image img){
this.img = img;
}
// Méthodes de dessin
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(img!=null)g.drawImage(img, 0, 0, this);
Graphics2D g2 = (Graphics2D)g;
drawPerso1(g2);
drawPerso2(g2);
}
private void drawPerso1(Graphics2D g2) {
g2.setColor(Color.BLUE);
// Tete
g2.fillOval(mvt_perso1.get(counter)[0]-5, mvt_perso1.get(counter)[1]-5, 10, 10);
// Corps
g2.drawLine(mvt_perso1.get(counter)[0], mvt_perso1.get(counter)[1]+5, mvt_perso1.get(counter)[0], mvt_perso1.get(counter)[1]+15);
// Membres
g2.drawLine(mvt_perso1.get(counter)[0], mvt_perso1.get(counter)[1]+7, mvt_perso1.get(counter)[0]-5, mvt_perso1.get(counter)[1]+12);
g2.drawLine(mvt_perso1.get(counter)[0], mvt_perso1.get(counter)[1]+7, mvt_perso1.get(counter)[0]+5, mvt_perso1.get(counter)[1]+12);
g2.drawLine(mvt_perso1.get(counter)[0], mvt_perso1.get(counter)[1]+15, mvt_perso1.get(counter)[0]-5, mvt_perso1.get(counter)[1]+20);
g2.drawLine(mvt_perso1.get(counter)[0], mvt_perso1.get(counter)[1]+15, mvt_perso1.get(counter)[0]+5, mvt_perso1.get(counter)[1]+20);
}
private void drawPerso2(Graphics2D g2) {
g2.setColor(Color.RED);
// Tete
g2.fillOval(mvt_perso2.get(counter)[0]-5, mvt_perso2.get(counter)[1]-5, 10, 10);
// Corps
g2.drawLine(mvt_perso2.get(counter)[0], mvt_perso2.get(counter)[1]+5, mvt_perso2.get(counter)[0], mvt_perso2.get(counter)[1]+15);
// Membres
g2.drawLine(mvt_perso2.get(counter)[0], mvt_perso2.get(counter)[1]+7, mvt_perso2.get(counter)[0]-5, mvt_perso2.get(counter)[1]+12);
g2.drawLine(mvt_perso2.get(counter)[0], mvt_perso2.get(counter)[1]+7, mvt_perso2.get(counter)[0]+5, mvt_perso2.get(counter)[1]+12);
g2.fillPolygon(new int[]{mvt_perso2.get(counter)[0], mvt_perso2.get(counter)[0]-5, mvt_perso2.get(counter)[0]+5}, new int[]{mvt_perso2.get(counter)[1]+10, mvt_perso2.get(counter)[1]+20, mvt_perso2.get(counter)[1]+20}, 3);
}
// Action provoquée par le timer
public void actionPerformed(ActionEvent e) {
counter++;
if(counter==mvt_perso1.size())timer.stop();
else repaint();
}
// Main
public static void main(String[] args) {
JFrame frame = new JFrame("Scène");
Test pan = new Test();
pan.setBackground( /*ton_image*/ );
frame.setContentPane(pan);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} |
Partager