所以我正在为java中的突破游戏编写代码。现在,我进行了设置,以便它向玩家提示一个对话框,询问玩家每行需要多少砖(4到40之间的数字)。混乱的部分是与球和桨的整个碰撞。我对编程非常陌生,所以请原谅我,如果它非常容易。使用博士。 Java的。
//------------------------------- 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;
}
}
答案 0 :(得分: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");
}
如果它解决了您的问题,请不要忘记将其标记为已解答。