2017-04-19 50 views
0

我正在尝试更改矩形的y位置,但是,每当我尝试时,它将展开/ 垂直地取大于形状增大而不是移动 - Java(GUI小程序)

public class PlayerPaddle implements Paddle { 

    double yVelocity; 
    final double GRAVITY = 0.94; 

    //move up/down faster (if not accelerating = slow down) 
    boolean upAccel, downAccel; 

    //determines if player 1 or player 2 (on left or on right) 
    int player; 

    //position of actual paddle 
    int x; 
    double y; 


    Rectangle panel; 

    public PlayerPaddle(int player) { 

     upAccel = false; 
     downAccel = false; 

     y = 210; //not moving initially 
     yVelocity = 0; 

     if (player == 1) { 
      //left side 
      x = 20; 
     } else { 
      //right side 
      x = 660; 
     } 
    } 


    @Override 
    public void draw(Graphics g) { 

     //draw paddle 
     g.setColor(Color.WHITE); 
     g.fillRect(x, (int) y, 20, 80); 
    } 


    @Override 
    public void move() { 

     if (upAccel) { 
      yVelocity -= 2; 
     } else if (downAccel) { 
      yVelocity += 2; 
     } else if ((!upAccel) && (!downAccel)) { 
      yVelocity *= GRAVITY; 
     } 
     y += yVelocity; //changes y position of paddle 
    } 

    public void setUpAccel(boolean input) { 
     upAccel = input; 
    } 

    public void setDownAccel(boolean input) { 
     downAccel = input; 
    } 

    @Override 
    public int getY() { 
     return (int) y; 
    } 
} 

我想知道如何使矩形上下垂直移动。一个类似的问题只有一个答案,表示以前画的矩形没有被清除,结果正在扩大。但即使当我说g.clearRect(...)它仍然扩大,不动。

我是Swing和Awt的新手,但我真的很想学习。 感谢您的帮助。

回答

1

类似的问题只有一个答案,说,以前画的矩形没有被清除,其结果是扩大

在这里,这仍然是可能的问题。

某处,不在此处介绍的代码中,您需要调用此类的draw(...)方法。

所以在该代码中,您需要确保在绘制桨之前清除组件背景。既然你应该覆盖面板的paintComponent(...)方法做定制画你的代码应该是这个样子:

@Override 
protected void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    // draw the paddle 
} 

阅读从Custom Painting Swing的教程部分获取更多信息和工作的例子。

我是Swing和Awt的新手,但我真的很想学习。

然后保留所有Swing基础知识的指南。

+0

感谢您的帮助:) – badProgrammer

+0

哦,我的坏,只是做 – badProgrammer