所以我在java中制作了一个Pong游戏,由于某些原因,有时球不会检查与屏幕底部或顶部的碰撞。我该怎么做才能解决这个问题?
这件作品是与屏幕底部或顶部的碰撞检查:
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;`
球碰撞系统:
public void Blogic(Random random,HumanPaddle p1, HumanPaddle p2)
{//collision
//Left
if(x<=50)
{
if(y>= p1.y && y<=p1.y + 80)
RandomDir(6,4,random);
}
//Right
else if(x>=650)
{
if(y>=p2.y && y<=p2.y+ 80)
RandomDir(3,1,random);
}
//Up
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;
}
球运动系统:
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);
}
}
}
答案 0 :(得分:0)
我很难在没有视觉的情况下确切地看到碰撞是如何工作的,但我会尝试在没有额外检查上下板的方向的情况下。我相信通过这样做,你正在检查一些应该是真实的东西,所以它太严格了。
删除:“&amp;&amp; dir == UP_RIGHT”,相反。 出于某种原因,这可能不是真的,完全跳过检查。
答案 1 :(得分:0)
我在这件作品中做了这个改变,现在它工作正常。
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;
}