Мое обнаружение столкновений не работает для Java графики - PullRequest
0 голосов
/ 05 мая 2020
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 новичок, чтобы не кричать на меня из-за очевидных ошибок и плохой структуры. Спасибо

...