如何在将其绘制到屏幕后清除矩形?

时间:2014-11-11 11:51:29

标签: java swing graphics paintcomponent repaint

我意识到我的游戏中缺少的主要组件是时间感,刻度线或FPS。我计划很快实现这一点,但想得到一些关于如何设置我的"子弹的反馈#34;代替。我希望用户按空格键并在屏幕上弹出一颗子弹。现在我已经接近了,没有FPS感;然而,它只是作为一个巨大的线条绘制,意味着子弹"追踪"永远不会清除。我想知道为什么,当我调用重绘时,矩形可以通过我的键盘在屏幕上移动,但每当我有一些设置自动移动然后它就会留下一条"线索",即使我正在呼叫{每种方法都有{1}}。

另外,我怎么能从另一个班级创建我的子弹?

repaint();

2 个答案:

答案 0 :(得分:3)

首先修复油漆链......

@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(new Color(255,25,0));
    g2.setFont(new Font("monospace", Font.BOLD+Font.ITALIC, 30));
    g2.drawString("nothing yet",300,320);
    g2.fill(hello);

接下来,停止在paint方法中更改组件的状态......

    //setFocusable(true);
    //requestFocus();
    g2.setColor(new Color(0,25,0));
    if (goingon == true){
    while (bullet.y < 1000){
        bullet.y=bullet.y+10;
        g2.fill(bullet);
    }
    bullet.y=300;



}

绘制应该简单地绘制组件的当前状态,它永远不应该尝试修改组件的状态,这样做可能会触发另一个绘制请求,这将使您的代码进入绘制的无限循环并消耗CPU周期。

Swing使用被动渲染算法,这意味着,只有当重绘经理认为需要完成绘画时才会进行绘画,这意味着绘画可以随机完成,而且大部分时间没有你的介入...

基于您试图强调焦点到组件的事实,我假设您正在尝试克服与KeyListener相关的问题。相反,您应该使用键绑定API。请查看How to Use Key Bindings了解更多详情

请查看Painting in AWT and SwingPerforming Custom Painting了解详情。

答案 1 :(得分:1)

请勿忘记以覆盖super.paintComponent()方式拨打paintComponent()来清除预览视图。

Read more...