Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个帧调用的Java函数_Java_Time_Frame_Processing_Runnable - Fatal编程技术网

每个帧调用的Java函数

每个帧调用的Java函数,java,time,frame,processing,runnable,Java,Time,Frame,Processing,Runnable,我想知道是否有一个函数像编程语言使用的那样,每一帧都被调用。或者甚至只是一个函数,当它被调用时无限循环,但只在每次有新的帧时运行。我听说java中有一种叫做runnable的东西,我该如何使用它呢?还有一种更好的方法,就是使用一个带有延迟的runnable,比如一个硬编码的函数来运行每一帧。哦,还有什么函数调用可以让我看到多少时间(最好以毫秒为单位)由于应用程序已经开始以这种方式运行,我可以使我的runnables/frame调用更加精确,因此无论帧速率如何,游戏在每台计算机上都以相同的速度运行

我想知道是否有一个函数像编程语言使用的那样,每一帧都被调用。或者甚至只是一个函数,当它被调用时无限循环,但只在每次有新的帧时运行。我听说java中有一种叫做runnable的东西,我该如何使用它呢?还有一种更好的方法,就是使用一个带有延迟的runnable,比如一个硬编码的函数来运行每一帧。哦,还有什么函数调用可以让我看到多少时间(最好以毫秒为单位)由于应用程序已经开始以这种方式运行,我可以使我的runnables/frame调用更加精确,因此无论帧速率如何,游戏在每台计算机上都以相同的速度运行。

也许您需要这样的功能

import java.awt.Graphics;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

public class Repainter extends JPanel {
    private Point topLeft;
    private int increamentX = 5;

    public Repainter() {
        topLeft = new Point(100, 100);
    }

    public void move() {
        topLeft.x += increamentX;
        if (topLeft.x >= 200 || topLeft.x <= 100) {
            increamentX = -increamentX;
        }

        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawRect(topLeft.x, topLeft.y, 100, 100);
    }

    public void startAnimation() {
        SwingWorker<Object, Object> sw = new SwingWorker<Object, Object>() {
            @Override
            protected Object doInBackground() throws Exception {
                while (true) {
                    move();
                    Thread.sleep(100);
                }
            }
        };

        sw.execute();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame("Repaint Demo");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(400, 400);

                Repainter repainter = new Repainter();

                frame.add(repainter);

                repainter.startAnimation();
                frame.setVisible(true);
            }
        });
    }
}
导入java.awt.Graphics;
导入java.awt.Point;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.SwingWorker;
公共类Repainer扩展了JPanel{
私人点左上角;
私有整数增量x=5;
公共交通{
左上=新点(100100);
}
公开作废动议(){
左上角.x+=增量x;

如果(topLeft.x>=200 | | topLeft.x你所说的
frame
到底是什么意思?你说的是图形窗口吗?我的意思是像FPS中的帧一样。就像每次屏幕刷新一样。对于大多数像样的显示器,每秒刷新60次。我猜你在写你的第一个游戏。我建议你买本书或在线阅读一些关于g的教程Java中的ame开发。这应该教会你你想知道的一切。我只是想知道为什么人们否决了我的问题,有人能告诉我我做错了什么吗?这是因为无知的Java程序员懒得研究处理,即使你给了它一个链接。我投了赞成票。