J'essaie d'éditer ma minuterie de sorte que toutes les 25 fois repaint() s'appelle la vitesse d'allumage du minuteur coupe de moitié. Donc les 25 premières fois c'est 500; puis les 25 prochaines fois ses 250; etc.Changement de délai dans la minuterie Java
Deux 'FACILE POUR LES RENCONTRES' questions:
1) Pourquoi Eclipse me fait faire les variables statiques (ou autrement pas la compilation)? 2) Le programme ne semble pas atteindre la fonction où je diviser la vitesse de moitié et régler le retard à cette nouvelle vitesse. Pourquoi donc? Comment je le répare?
public class MovingCircle extends JFrame implements ActionListener {
Ellipse2D.Double myEllipse;
Rectangle2D.Double backgroundRectangle;
private static int paintCount = 0;
private static int speed = 500;
public MovingCircle() {
//Make the ellipse at the starting position
myEllipse = new Ellipse2D.Double(30, 30, 20, 20);
//Make the background rectangle to "erase" the screen
backgroundRectangle = new Rectangle2D.Double(0, 0, 400, 300);
}
public static void main(String[] args) {
MovingCircle b = new MovingCircle();
b.setSize(400, 300);
b.setVisible(true);
b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Timer t = new Timer(500, b);
t.start();
if(paintCount % 25 == 0) {
t.setDelay((int)(speed/2));
speed = (int)(speed/2);
System.out.println(speed);
}
}
public void actionPerformed(ActionEvent ae) {
//This will be called by the Timer
myEllipse.setFrame(myEllipse.getX()+1, myEllipse.getY()+1, myEllipse.getWidth(), myEllipse.getHeight());
//Move 1 x-pixel and 1 y-pixel every 50 milliseconds^
repaint();
}
public void paint(Graphics g) {
paintCount++; // Incremenets by one for every repaint().
System.out.println(paintCount);
int isPaintTen = (int)(paintCount/10); // Divid current count by 10.
Graphics2D g2 = (Graphics2D)g;
if((isPaintTen % 2) == 0){ // Take modulus to set if #/10 is odd or even.
g2.setColor(Color.YELLOW);
g2.fill(backgroundRectangle);
g2.setColor(Color.RED);
g2.draw(myEllipse);
}
else if((isPaintTen % 2) == 1) {
g2.setColor(Color.RED);
g2.fill(backgroundRectangle);
g2.setColor(Color.YELLOW);
g2.draw(myEllipse);
}
}
}
Il sera plus facile pour « l'expérimenté » pour vous aider, si vous prenez le temps de fixer l'empreinte de votre exemple de code donc on peut le lire sans compter les accolades. – Lee