0

だから私は現在Javaでブレイクアウトゲームのコードを書いています。現在、1 行に必要なレンガの数 (4 ~ 40 の数字) をプレイヤーに尋ねるダイアログ ボックスが表示されるように設定しています。めちゃくちゃになる部分は、ボールとパドルとの衝突全体です。私はプログラミングに非常に慣れていないので、信じられないほど簡単であれば許してください。博士を使用しています。ジャバ。

    //-------------------------------  animate -------------------------
    /**
     * this should send the ball back after hitting the paddle.
     * 
     */ 
    public void animate( )
    {
            int dX = ball.getXLocation( ); 
            int dY = ball.getYLocation( );
            while( true )
            {

            ball.move( );
            if ( ball.boundsIntersects( paddle) ) 
            {

                dY= -1*dY;
                ball.setLocation( dX,dY );


            }

            for(int i = 0; i < bricks.size(); i++)
            {

            if (ball.boundsIntersects(bricks.get(i)))
            {


                dY = -dY;
                ball.setLocation(dX,dY);
                bricks.get(i).hide();
                bricks.remove(i);
                System.out.println("brick");
            }

}

これが私のボールクラスの move メソッドです。恐ろしいコードでもう一度申し訳ありません。

//-------------------------------  move ----------------------------
    /**
     * This will move the ball by deltaX and deltaY
     * and bounce the ball off the edges of the Frame.
     * 
     */ 

    public void move( ) 
    {

        int dX = this.getXLocation( ) + deltaX;
        int dY = this.getYLocation( ) + deltaY;
        this.setLocation( dX, dY );
        if( getYLocation( ) < 0 )
        {
            setLocation( dX, 0 );
            deltaY *=-1;
        }
        else if( getYLocation( ) > ( 500 + size ) )
        {
            setLocation( dX, 500-size);
            deltaY *=-1;
        }
        if( getXLocation() < 0 )
        {
            setLocation( dX , dY );
            deltaX *=-1;
        }
        else if( getXLocation( ) > ( 500 + size ) )
        {
            setLocation( 500-size, dY );
            deltaX *=-1;
        }

   }    
4

1 に答える 1

0

あなたの animate() 関数では、ボールの Y 値を何かと衝突したときの負の値に設定しています。move() 関数で行うように、「deltaY」を負に設定するつもりだと思います。変数名は「dY」ですが、それは単なる Y のようです。

パドルに当たったときのボールの現在の動作は? ブロックに当たったときも同じように奇妙な動作をしますか? ブロックにヒットしたときにチェックするコードで同じ -Y を実行しているようです。

編集:このコードのように見えます:

        if ( ball.boundsIntersects( paddle) ) 
        {
            dY= -1*dY;
            ball.setLocation( dX,dY );
        }

次のように変更する必要があります。

if ( ball.boundsIntersects( paddle) ) 
{
    ball.deltaY = -ball.deltaY;
}

ここでも同じです:

if (ball.boundsIntersects(bricks.get(i)))
{
    dY = -dY;
    ball.setLocation(dX,dY);
    bricks.get(i).hide();
    bricks.remove(i);
    System.out.println("brick");
 }

に:

if (ball.boundsIntersects(bricks.get(i)))
{
    ball.deltaY = -ball.deltaY;
    bricks.get(i).hide();
    bricks.remove(i);
    System.out.println("brick");
 }

問題が解決した場合は、これを回答済みとしてマークすることを忘れないでください。

于 2013-10-31T00:30:20.720 に答える