|
Тема |
Айде малко да си размърдате мозъците |
|
Автор |
jensen-110062 (рекордьор) |
|
Публикувано | 23.09.11 22:22 |
|
|
Предлагам ви моя елементарна сглобка на програмата за топки движещи се в панел.
Но се получава един странен ефект, който не мога да разбера от къде идва. Едната топка си върви нормално, а другата вибрира в горната част на панела.
Трябва да се направи панел с топки вътре (2 в моя случай), които се движат безразборно и си сменят посоката при сблъсък в стените на панела.
Ще се радвам ако някой я погледне и подскаже къде бъркам.
Пускам двата класа. Който намери грешката ще получи всичко, каквото си пожелае (виртуално) и разбира се моето признание . Хайде да ви видим
import java.awt.*;
import javax.swing.*;
public class BouncingBalls {
public static void main(String[] args) {
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,300);
Pan panel1=new Pan(Color.RED);
Pan panel2=new Pan(Color.BLUE);
panel1.add(panel2);
frame.add(panel1);
Thread t1=new Thread(panel1);
Thread t2=new Thread(panel2);
t1.start();
t2.start();
frame.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Pan extends JPanel implements ActionListener, Runnable{
private int DIAMETER = 40;
private int ballX =0;
private int ballY =0;
private double ballSpeedX = Math.random()*20; // Ball's speed for x and y
private double ballSpeedY = Math.random()*20;
private int rightBound; // Maximum permissible x, y values.
private int bottomBound;
Timer time;
Color color;
public Pan(Color color) {
this.color=color;
setBackground(Color.WHITE);
time=new Timer(10, this);
time.start();
}
public void setBounds(int width, int height) {
rightBound = width - DIAMETER;
bottomBound = height - DIAMETER;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(color);
g.fillOval(ballX, ballY, DIAMETER, DIAMETER);
}
public void move() {
ballX += ballSpeedX;
ballY += ballSpeedY;
if (ballX < 0) {
ballX = 0;
ballSpeedX = -ballSpeedX;
} else if (ballX > rightBound) {
ballX = rightBound;
ballSpeedX = -ballSpeedX;
}
if (ballY < 0) {
ballY = 0;
ballSpeedY = -ballSpeedY;
} else if (ballY > bottomBound) {
ballY = bottomBound;
ballSpeedY = -ballSpeedY;
}
}
public void actionPerformed (ActionEvent event) {
setBounds(getWidth(), getHeight());
move();
repaint();
}
public void run() {
try {
Thread.sleep( 20 );
}
catch ( InterruptedException exception ) {
System.err.println( exception.toString() );
}
time.start();
}
}
|
| |
|
|
|