Witam.
Chciałbym aby 2. wątek oddawał do wątku podstawowego(?) tablice/kilka zmiennych charakteryzujących położeie piłki. Obecny program działa i mogę odbijać sobie piłki okrawędzie JComponent, ale chciałbym do niego dodać deseczkę, która poruszana przez user'a będzie odbijała piłkę przy dolnej krawędzi (jak w starych grach).
public class Ball
{
public static void main (String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new BounceFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
});
}
}
class BallRunnable implements Runnable
{
public BallRunnable(BallItem aBall, Component aComp)
{
ball = aBall;
comp = aComp;
}
public void run()
{
try
{
kill = 0;
while(kill < TIME)
{
//throwI.move(comp.getBounds());
ball.move(comp.getBounds(), 0, 0);
comp.paint(comp.getGraphics());
Thread.sleep(DELAY);
kill++;
}
}
catch(InterruptedException e)
{
}
}
int kill;
private BallItem ball;
private Component comp;
public static final int DELAY = 3;
private static final int TIME = 5000;
}
class BounceFrame extends JFrame
{
public BounceFrame()
{
setSize(DEF_WIDTH, DEF_HEIGHT);
setTitle("Piłka");
comp = new BallComponent();
add(comp, BorderLayout.CENTER);
kill = 0;
JPanel buttonPanel = new JPanel();
JButton startButtton = new JButton("Start");
startButtton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
addBall();
}
});
buttonPanel.add(startButtton);
final ThrowItem throwI = new ThrowItem();
comp.addThrow(throwI);
add(buttonPanel, BorderLayout.SOUTH);
}
public void addBall()
{
BallItem ball = new BallItem();
comp.add(ball);
Runnable r = new BallRunnable(ball, comp);
Thread t = new Thread(r);
t.start();
}
int kill;
private BallComponent comp;
ThrowItem throwI;
public static final int DEF_WIDTH = 400;
public static final int DEF_HEIGHT = 400;
public static final int DELAY = 5;
}
comp to ten JCompoent. Ball to obiekt piłki, ThrowItem to obiekt "deseczki". Ball.move() sprawdza czy nie ma zderzenia z throwItem.
//throwI.move(comp.getBounds());
ball.move(comp.getBounds(), 0, 0);
Obecnie jest to wyłączone ale gdyby podać throwI.getX() i Y zamiast "0" to deseczka ruszałaby się i starała odbić piłkę. Problem pojawiasię gdy chcę oddać władzę nad ruchem deseczki użytkownikowi, który chyba "jest" w innym wątku :-( .