【问题标题】:Call paint method in the game fps tick in java在java中调用游戏fps tick中的paint方法
【发布时间】:2014-06-13 13:06:10
【问题描述】:

如何使用每秒运行 60 次的厚方法调用我的绘画方法来绘制其中的所有内容。

这是fps计算:

int FRAMES_PER_SECOND = 60;
    long maxWorkingTimePerFrame = 1000 / FRAMES_PER_SECOND;  //this is optional
    long lastStartTime = System.currentTimeMillis();

    while(true)
    {
        lastStartTime = System.currentTimeMillis();

            Tick();

        long processingTimeForCurrentFrame = System.currentTimeMillis() - lastStartTime;
        if(processingTimeForCurrentFrame  < maxWorkingTimePerFrame)
        {
            try
            {
                Thread.sleep(maxWorkingTimePerFrame - processingTimeForCurrentFrame);
            }
            catch(Exception e)
            {
                System.err.println("TSEngine :: run :: " + e);
            }
        }
    }

那我怎么打电话:

public void paint( Graphics g ) {

}

在我的 Tick 方法中?

【问题讨论】:

  • 呃,从你的Tick方法的实现中调用它?
  • 你的意思是像替换paint方法并使用:public static void Tick(Graphics g){}代替?
  • 我不敢相信这个问题还没有被问到。

标签: java loops methods paint frame-rate


【解决方案1】:

要在你的 Tick 方法中调用paint() 方法,你需要调用repaint() 方法。在您的循环中,当您希望组件调用您编写的绘制方法时,只需添加 repaint()

阅读这篇文章,因为它稍微解释了绘画和重绘的工作原理。 http://www.scs.ryerson.ca/~mes/courses/cps530/programs/threads/Repaint/index.html.

这是一篇演示如何调用重绘的文章。 http://www.scs.ryerson.ca/~mes/courses/cps530/programs/threads/Repaint/RepaintApplet3.java

【讨论】:

  • 我试过了,但它现在给我的只是一个空白的屏幕,我无法关闭程序
  • 但它必须是 infitie 才能成为 fps 循环,对吧?
  • 创建一个每秒调用 60 次方法的线程。在那个方法中,放 repaint()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
相关资源
最近更新 更多