Witam wszystkich, jestem tu nowy,
mianowicie mam problem z zrobieniem kolizji miedzy kulkami w animacji 2d, gdy się ze sobą spotkają mają się odbić tak jak od ścian okna, ktoś ma jakiś najprostszy sposób? oto kod
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class PanelAnimacja extends JPanel implements MouseListener{
Vector v;
PanelAnimacja(){
v = new Vector();
addMouseListener(this);
}
public void paintComponent(Graphics g){
Graphics2D g2D = (Graphics2D)g;
g2D.setColor(Color.yellow);
g2D.fillRect(0,0,getSize().width, getSize().height);
g2D.setColor(Color.blue);
for(int i=0; i<v.size(); i++){
Pilka pilka = (Pilka)v.get(i);
pilka.rysuj(g2D);
}
try{
Thread.sleep(40);
}catch (InterruptedException e){}
repaint();
}
public void mousePressed (MouseEvent e){
v.add(new Pilka(e.getX(), e.getY(), getSize().width, getSize().height));
repaint();
}
public void mouseReleased (MouseEvent e) { }
public void mouseEntered (MouseEvent e) { }
public void mouseExited (MouseEvent e) { }
public void mouseClicked (MouseEvent e) { }
void saySomething(String eventDescription, MouseEvent e) { }
}
import javax.swing.*;
import java.awt.*;
class Pilka implements Runnable{
int x, y, krok=2, kierX=1, kierY=1, rozmiar=20, szer, wys;
Thread watek;
Pilka(int x, int y, int szer, int wys){
this.x=x;
this.y=y;
this.szer=szer;
this.wys=wys;
if (watek==null)
watek = new Thread(this);
watek.start();
}
public void run (){
while(true){
if(x<0) kierX=1;
if(x+rozmiar>szer) kierX=-1;
if(y<0) kierY=1;
if(y+rozmiar>wys) kierY=-1;
x=x+krok*kierX;
y=y+krok*kierY;
try{
Thread.sleep(40);
}catch (InterruptedException e){}
}
}
public void rysuj(Graphics2D g){
g.fillOval(x,y,rozmiar, rozmiar);
}
}
import javax.swing.*;
import java.awt.*;
class Animacja extends JFrame{
Animacja(){
super("Animacja");
setBounds(100,100,1024,680);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
PanelAnimacja animacja = new PanelAnimacja();
setContentPane(animacja);
setVisible(true);
}
static public void main (String arg[]){
new Animacja();
}
}