Я создаю анимацию.Автомобиль движется, и вокруг него создаются волны.Волны являются объектами ArrayList.Я хочу, чтобы волны выглядели так:
Я хочу, чтобы они были ближе друг к другу в передней части автомобиля, и далеко друг от другасзади.
С этим кодом волны выглядят так:
(они ближе друг к другу сзади,не спереди)
public void actionPerformed(ActionEvent e) {
CarParametrs pa = pAuto;
pa.xPos += pa.velX;
HumanParametrs pc = pHuman;
pc.xPos += pc.velX;
synchronized (waves) {
for (WaveParameters w : waves) {
if(pa.velX==0 && pc.velX==0)
{
w.xPos = pa.xPos+50;
w.height+=20;
w.width+=20;
w.yPos-=20/5 ;
}
else{
w.xPos = pa.xPos+50;
w.height+=pa.velX;
w.width+=pa.velX;
for (WaveParameters ww : waves) {
ww.xPos-=5; //for ww.xPos +5; they appear not next to each other
ww.width+=1;
}
w.yPos-=pa.velX/5 ;
}
}
}
SwingUtilities.invokeLater(()->repaint());
}
Подскажите, пожалуйста, как решить эту проблему?Весь класс выглядит так:
public class PanelAnimation extends JPanel implements ActionListener{
public PanelAnimation(ResourceBundle bundle) {
super();
resourceBundle = bundle;
try {
imageBackground = ImageIO.read(new File("bg.png"));
} catch (IOException ex) {
// handle exception...
}
}
CarParametrs pAuto = new CarParametrs();
HumanParametrs pHuman = new HumanParametrs() ;
ArrayList<WaveParameters> waves = new ArrayList<WaveParameters>();
Timer t = new Timer(60,this);
Timer draw;
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 animationStart() {
t.start();
}
public void animationStop() {
t.stop();
}
public void addTimerAddingWaves(){
if(draw==null) {
draw= new Timer(300, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
WaveParameters wave = new WaveParameters();
waves.add(wave);
}
});
draw.start();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imageBackground, 0, 0, null);
pAuto.paint(g);
pHuman.paint(g);
synchronized (waves) {
for (WaveParameters w : waves) {
w.paint(g);
}
}
}
public void actionPerformed(ActionEvent e) {
CarParametrs pa = pAuto;
pa.xPos += pa.velX;
HumanParametrs pc = pHuman;
pc.xPos += pc.velX;
synchronized (waves) {
for (WaveParameters w : waves) {
if(pa.velX==0 && pc.velX==0)
{
w.xPos = pa.xPos+50;
w.height+=20;
w.width+=20;
w.yPos-=20/5 ;
}
else{
w.xPos = pa.xPos+50;
w.height+=pa.velX;
w.width+=pa.velX;
for (WaveParameters ww : waves) {
ww.xPos-=5;
ww.width+=1;
}
w.yPos-=pa.velX/5 ;
}
}
}
SwingUtilities.invokeLater(()->repaint());
}
Color colorPanelAnimation;
TitledBorder titlePanelAnimation;
ResourceBundle resourceBundle;
private BufferedImage imageBackground;
public void stopTimerAddingWaves() {
if(draw!=null) {
draw.stop();
draw=null;
}
}
И класс WaveParameters:
public class WaveParameters {
int xPos=0;
int yPos = 375;
int width=60;
int height=60;
int velX = 5 ;
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 getY() {
return xPos;
}
public void setY(int yPos) {
this.yPos = yPos;
}
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);
}
}