int border=30;
boolean balldown=true;
boolean ballright=true;
int bounce=0;
public void moveBall(){
if (balldown==true){
//y++;
rect3.b++;
}
if (balldown==false){
y--;
rect3.b--;
}
//y==getHeight()-border
if(rect3.b==getHeight()-border){
balldown=false;
bounce++;
}
//y==0
if(rect3.b==0){
balldown=true;
bounce++;
}
if (ballright==true){
x++;
rect3.a++;
}
if (ballright==false){
x--;
rect3.a--;
}
//x==getWidth
if(colision==true){
ballright=false;
bounce++;
}
colision=false;
//x==0
//rect3.bounds2()==rect1.bounds()
if(colision==true){
ballright=true;
bounce++;
}
}
/* if(rect3.a==getWidth()){
ballright=false;
}
if(rect3.a==0){
ballright=true;
}*/
}
// int a=0;
// int b=0;
//int width=30;
// int height=200;
rect rect1;
rect rect2;
rect rect3;
Timer time;
boolean colision=false;
public Pong() {
rect1 = new rect(0,0);
rect2 = new rect(977,0);
rect3=new rect(40,40);
time=new Timer(5,this);
time.start();
}
public class rect{
int a,b;
public rect(int startA, int startB){
a=startA;
b=startB;
}
public Rectangle bounds(){
return (new Rectangle(a,b,30,200));
}
public Rectangle bounds2(){
return (new Rectangle(a,b,30,30));
}
}
@Override
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d=(Graphics2D) g;
g.setColor(Color.BLACK);
g.fillRect(0, 0, 1080, 760);
g2d.setColor(Color.WHITE);
// g.fillOval(x, y, 30, 30);
g2d.fillRect(rect3.a, rect3.b, 30, 30);
g2d.setColor(Color.WHITE);
g2d.fillRect(rect1.a, rect1.b, 30, 200);
g2d.setColor(Color.WHITE);
g2d.fillRect(rect2.a, rect2.b, 30, 200);
g2d.fillRect(520, 0, 10, 760);
if (colision==true)
g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
g.drawString("Colision",350, 50);
g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
g.setColor(Color.WHITE);
g.drawString("BOUNCES: "+bounce, 40, 20);
}
public void colision(){
Rectangle rectangle1=rect1.bounds();
Rectangle rectangle2=rect2.bounds();
Rectangle rectangle3=rect3.bounds2();
if(rectangle3.intersects(rectangle1))
colision=true;
else
colision=false;
if(rectangle3.intersects(rectangle2))
colision=true;
else
colision=false;
}
@Override
public void actionPerformed(ActionEvent e){
moveBall();
colision();
repaint();
Так что в основном мой оператор if, использующий пересечения, никогда не возвращает истину, когда мой мяч попадает в прямоугольник сбоку. Также в моем методе moveball предполагается, что "отскакивает" в другом направлении всякий раз, когда эти границы встречаются, но он не работает и просто проходит через корыто даже без обнаружения столкновений. Я неправильно реализовал? Когда я проверял с помощью system.out.print, он продолжал возвращать сообщение примерно 2 раза в секунду или даже быстрее. Я java новичок, чтобы не кричать на меня из-за очевидных ошибок и плохой структуры. Спасибо