当运行我的代码时,有时会忽略步骤,为什么会发生这种情况?JAVA
因此,我用java制作了一个乒乓球游戏,由于某些原因,有时球不会检查与屏幕底部或顶部的碰撞。我能做些什么来解决这个问题 这是与屏幕底部或顶部的碰撞检查:当运行我的代码时,有时会忽略步骤,为什么会发生这种情况?JAVA,java,netbeans,Java,Netbeans,因此,我用java制作了一个乒乓球游戏,由于某些原因,有时球不会检查与屏幕底部或顶部的碰撞。我能做些什么来解决这个问题 这是与屏幕底部或顶部的碰撞检查: if(y-20<0 && dir == UP_RIGHT) dir=DOWN_RIGHT; else if (y-20<0 && dir == UP_LEFT) dir=DOWN_LEFT; //Down if(y+20>500 && dir == DOWN_RI
if(y-20<0 && dir == UP_RIGHT)
dir=DOWN_RIGHT;
else if (y-20<0 && dir == UP_LEFT)
dir=DOWN_LEFT;
//Down
if(y+20>500 && dir == DOWN_RIGHT)
dir=UP_RIGHT;
else if(y+20>500 && dir == DOWN_LEFT)
dir=UP_LEFT;`
我很难在没有视觉的情况下准确地看到碰撞是如何进行的,但我会尝试在没有额外检查上下板方向的情况下进行。我相信,通过这样做,你检查的东西,无论如何应该是真实的,所以它只是太严格了 删除:“&&dir==UP_RIGHT”,反之亦然。
出于某种原因,这可能不是真的,完全跳过检查。我在那件作品中做了这些更改,现在它工作正常
if(y <=10)
{
if(dir == UP_RIGHT) dir=DOWN_RIGHT;
else if (dir == UP_LEFT)dir = DOWN_LEFT;
else yVel=-yVel;
}
//Down
if(y>=490)
{
if(dir == DOWN_RIGHT)dir=UP_RIGHT;
else if (dir ==DOWN_LEFT) dir=UP_LEFT;
else yVel=-yVel;
}
if(y=490)
{
如果(dir==向下\右)dir=向上\右;
如果(dir==左下)dir=左上,则为else;
否则yVel=-yVel;
}
只是一个提示:即使对于一条语句if/else分支,也要始终使用大括号{}。然后方法名将按大小写。。对有经验的Java人员来说,偏离这些标准会使代码更难阅读。最后现在怎么办-java或Javascript?@GhostCat或在IDE中使用代码格式化程序,那么就不需要添加冗余的{};)代码格式化程序对于忽略大括号迟早会导致的细微错误并没有真正的帮助。通常更快。虽然我不知道什么是p1
和p2
,但我看不出你发布的代码有问题,可能在另一个代码中等待,在碰撞时你只是改变方向,move
会降低碰撞后的速度,但如果它没有“足够”降低速度怎么办所以你的球继续穿过屏幕,在我看来,你可以在碰撞时使速度为零,移动将增加速度,从而将球移动到你想要的方向
public void move()
{
switch(dir)
{
case STOP:
xVel *=0; yVel *=0;
break;
case LEFT:
xVel--;
break;
case UP_LEFT:
xVel--;
yVel--;
break;
case DOWN_LEFT:
xVel--;
yVel++;
break;
case RIGHT:
xVel++;
break;
case UP_RIGHT:
xVel++;
yVel--;
break;
case DOWN_RIGHT:
xVel++;
yVel++;
break;
default:
break;
}
// Velocity settings
if (xVel>=3)
xVel=3;
else if (xVel <=-3)
xVel=-3;
if(yVel >=3)
yVel=3;
else if(yVel<=-3)
yVel=-3;
x += xVel;
y += yVel;
}
public void run()
{
for (;;)
{
p1.move();
p2.move();
ball.move();
ball.Blogic(rand, p1, p2);
Score();
repaint();
try
{
Thread.sleep(10);
}
catch (InterruptedException ex)
{
Logger.getLogger(Tennis.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
if(y <=10)
{
if(dir == UP_RIGHT) dir=DOWN_RIGHT;
else if (dir == UP_LEFT)dir = DOWN_LEFT;
else yVel=-yVel;
}
//Down
if(y>=490)
{
if(dir == DOWN_RIGHT)dir=UP_RIGHT;
else if (dir ==DOWN_LEFT) dir=UP_LEFT;
else yVel=-yVel;
}