0

基本的な衝突を実装しようとしていますが、それを機能させる方法がわかりません。これまでのところBall、アンドロイドの境界を持つオブジェクトがありRect、ボックスと衝突するかどうかをテストしようとしています。私はこれまでにこのコードを持っています:

public void collides(Ball ball) {

//  if(ball.getX() > getX() - ball.getSize() && ball.getX() < getX() + getWidth() && ball.getY() > getY() && ball.getY() - ball.getSize() < getY() + getHeight()) {
        //System.out.println("we got a hit");

        if(Rect.intersects(ball.getBounds(),new Rect(getX(), getY(), getX() + getWidth(), getY()-3) ) ) { //bottom
                System.out.println("bottom");
                ball.setYvel(0);
                ball.setXvel(0);
                //ball.setYvel(ball.getYvel() * -1);
            } 
        if(Rect.intersects(ball.getBounds(), new Rect(getX(), getY()+getHeight(), getX()+getWidth(), getY()+getHeight()+3)) ) { //top
                System.out.println("top");
                ball.setYvel(0);
                ball.setXvel(0);
                //ball.setYvel(ball.getYvel() * -1);
            } 

            if(Rect.intersects(ball.getBounds(), new Rect(getX(), getY(), getX()+3, getY()+getHeight()))) {     //left
                System.out.println("left");
                ball.setXvel(0);
                ball.setYvel(0);
                //ball.setXvel(ball.getXvel() * -1);
            } 
            if(Rect.intersects(ball.getBounds(), new Rect(getX()+getWidth(), getY(), getX()+getWidth()-3, getY()+getHeight()) )) { //right
                System.out.println("right");
                ball.setXvel(0);
                ball.setYvel(0);
                //ball.setXvel(ball.getXvel() * -1);
            }
}

長方形を塗りつぶし、ボックス全体をカバーしていますが、衝突時に常に反応するとは限りません。また、ボールの四角形を塗りつぶし、あるべき場所に配置しました。ボックスの左側で正しく機能することもありますが、残りは通過します。また、おそらく非垂直衝突に陥る可能性があるので、その方法を知っている人がいたら教えてください。

4

2 に答える 2

0

修正しました。ボール クラスの境界を更新するのを忘れていました。これを修正するのに 5 時間も費やしたなんて信じられません。たった 1 行のコードでした。

于 2013-05-09T04:40:46.567 に答える