0

所以我目前正在用java编写一个突破游戏的代码。现在,我已经设置好了,它会通过一个对话框提示玩家,询问玩家每行需要多少块砖(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 ----------------------------
    /**
     * 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 值设置为负值,即它与某物碰撞时的值。我认为您的意思是将其“deltaY”设置为负值,就像您在 move() 函数中所做的那样。您的变量名称是“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 回答