【问题标题】:Parts of Java Animation dissappear部分 Java 动画消失了
【发布时间】:2016-06-01 19:21:09
【问题描述】:

我制作了一个在新线程中运行的简短 Java 动画。动画被绘制在画布上。它每 100 毫秒刷新一次。在某些刻度上,矩形没有出现。(在链接的视频中,你可以看到它)我试图在互联网上寻找解决方案,但由于我的标准英语,我不知道如何正确地用谷歌搜索它。

package com.felix.pack;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Draw extends Canvas implements Runnable {

    Thread x;
    int xpos = 0;
    int ypos = 0;
    JFrame window;
    boolean runs = false;
    Graphics g;

    public Draw() {
        doWindow();
        setPreferredSize(new Dimension(500,500));
        window.add(this);
    }

    @Override
    public void run() {

        g = getGraphics();
        while (runs) {
            paint(g);
            try {
                Thread.sleep(100);
                xpos +=1;
                ypos +=1;
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                System.out.println("Fail");
                stop();
            }
        }

    }

    private void doWindow(){
        window = new JFrame();
        window.setSize(500, 500);
        window.setTitle("Hey");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }

    public void start() {

        if (runs == false) {
            runs = true;
        x = new Thread(this);
        x.start();

        } else {
            System.out.println("Thread läuft bereits");
        }
    }

    public void stop() {
        runs = false;
        try {
            x.join();
            System.out.println("Thread erfolgreich geschlossen");
        } catch(Exception e) {
            System.out.println("Closing thread didnt work");
        }
    }

    public void paint(Graphics g){
        g.clearRect(0, 0, 500, 500);
        g.fillRect(xpos, ypos, 400, 400);
    }

}

在我的主类中,我启动了这个类中包含的方法 start。 您需要查看的部分(我认为)是 run() 方法和 paint 方法。其他的只是帮助让线程安全启动和停止。

https://www.youtube.com/watch?v=pAFng8mOcOQ

这是视频。我希望你们能帮助我,如果这是一个愚蠢的问题,我很抱歉:)

【问题讨论】:

    标签: java animation square


    【解决方案1】:

    在某些刻度上,矩形不显示

    我下载并运行了您的代码,但没有看到您描述的闪烁,因此这可能是您的系统限制。这篇文章似乎解决了您所看到的问题,尽管绘画速度更快:Stop flickering in swing when i repaint too much

    至于你在视频中看到的那种挥之不去的深灰色,那是因为你的paint()方法。请注意,即使窗口大小发生变化,您也始终只调用 g.clearRect(0, 0, 500, 500)。相反,请尝试g.clearRect(0, 0, window.getWidth(), window.getHeight()),这样当您的窗口大小发生变化时,您正在清除的区域也会发生变化。

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2014-11-18
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2016-08-09
      相关资源
      最近更新 更多