在运行我的代码时,有时会忽略步骤,为什么会发生这种情况? Java的

时间:2017-03-12 20:01:53

标签: java netbeans

所以我在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);
        }
    }

}

2 个答案:

答案 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;
    }