Рисование новой графики в ArrayList - PullRequest
0 голосов
/ 06 июня 2018

У меня есть приложение, в котором автомобиль движется по панели и создает звуковые волны - круги.Я хочу: 1) иметь несколько кругов в момент открытия рамки 2) когда нажата кнопка «Пуск», я хочу, чтобы они двигались, и я хочу, чтобы создавалось больше кругов, один за другим, пока не будет нажата кнопка «Стоп»

проблема в том, что: 1) когда рамка открыта, есть 5 кругов, но они полностью не двигаются 2) появляется 5 новых кругов, но из той же позиции XY они просто больше - я хочу один кругпосле другого он растет, и появляется следующий

вот мой код, я был бы признателен за полезный пример, или вы могли бы сказать мне, где моя ошибка.Я использовал количество 5 только для того, чтобы получить несколько образцов волн.

public class WaveParameters {

int xPos=0;
 int yPos = 375;
int width=60;
int height=60;
int velX = 0 ;
private Color color = Color.WHITE;

public int getVelX() {
    return velX;
}
public void setVelX(int velX) {
    this.velX = velX;
}
public int getX() {
    return xPos;
}
public void setX(int xPos) {
    this.xPos = xPos;
}
public int getWidth(){
   return width;}
public int getHeight(){
   return height;}
public void setWidth(int width) {
    this.width = width;
}
public void setHeight(int height) {
    this.height = height;
}
public Color getColor() {
    return color;
}
public void setColor(Color color) {
    this.color = color;
}
public void paint(Graphics g){
   g.setColor(getColor());
   g.drawOval(xPos,yPos,width/2,height/2);
}
}

Вот панель анимации:

public class PanelAnimation extends JPanel implements ActionListener{

List<WaveParameters> waves = new ArrayList<WaveParameters>();


public PanelAnimation(ResourceBundle bundle) {
    super();
    resourceBundle = bundle;    

    t.start();

    try {                
        imageBackground = ImageIO.read(newFile("bg.png"));
       } catch (IOException ex) {
            // handle exception...
       }    

    }
    CarParametrs pAuto = new CarParametrs();
    HumanParametrs pHuman = new HumanParametrs() ;
    Timer t = new Timer(60,this);
    //WaveParameters pWave = new WaveParameters();
    private BufferedImage imageBackground;
    MainFrame mf;

    public void addAuto(){
        CarParametrs ap = new CarParametrs();
        ap.setX(0);
        pAuto = ap;
    }
    public void addHuman(){
        HumanParametrs acz = new HumanParametrs();
        acz.setX(0);
        pHuman = acz;
    }
    public void addWave() {
        for (int i=0; i<5; i++) {

        WaveParameters wave = new WaveParameters();
    //  wave.setX(pAuto.xPos);
        wave.setColor(Color.white);
        wave.setWidth(wave.width*i);
        wave.setHeight(wave.height*i);
        waves.add(wave);
    }

    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(imageBackground, 0, 0, null);
        pAuto.paint(g);
        pHuman.paint(g);

        //if(mf.buttonStart.isSelected()) {
        addWave();
        //for (int i=0; i<5; i++) {
        for (WaveParameters w : waves) {
        //  waves.add(new WaveParameters());
            w.setX(pAuto.xPos);
            w.paint(g);
        //}
        }       
        //}
    }



public void actionPerformed(ActionEvent e) {        
        CarParametrs  pa = pAuto;
        pa.xPos += pa.velX;


        /*//WaveParameters wp = pWave;
        wp.xPos = pa.xPos;
        wp.xPos+=wp.velX;

        wp.height+=wp.velX;
        wp.width+=wp.velX;

        wp.yPos-=wp.velX/5 ;*/
        for (WaveParameters w : waves) {

            w.xPos = pa.xPos;
            w.xPos+=w.velX;

            w.height+=w.velX;
            w.width+=w.velX;

            w.yPos-=w.velX/5 ;
        }
        repaint();
    }

, а вот волновая часть слушателя действия для StartКнопка:

List<WaveParameters> wave = panelAnimation.waves;
                        for (WaveParameters w : wave) {
                            for (int i=0;i<5;i++) {
                                wave.add(new WaveParameters());
                                w.velX = Integer.parseInt(button2.getName());
                                w.xPos += w.velX;
                                w.width++;
                                w.height++;
                                w.yPos-=w.velX/5;
                            }


                        }

                        panelAnimation.repaint();

1 Ответ

0 голосов
/ 06 июня 2018

Пять новых больших кругов, которые появляются, вероятно, из-за последнего фрагмента кода, где вы перебираете все волны в анимации панели.

"wave.add (new WaveParameters ());"кажется ненужным, и может быть причиной того, что ваши старые волны остаются.Удалите эту строку, и она может сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...