当前位置: 首页 > 知识库问答 >
问题:

摇摆渲染...它总是必须是repaint()和paintComponent()吗?

况野
2023-03-14

在我的程序中,我在GUI中使用了Swing窗口,我知道我应该使用repaint和paintComponent方法来呈现Swing组件。我还有几个自定义类对象,需要在主窗口内呈现。为了理解,我的程序是一个游戏,将有移动的物体,需要渲染每秒60次。

那么,如果这样做有效(确实如此),为什么每个人都说要使用paintComponent方法,它们之间到底有什么区别?

如果我使用paintComponent的方式来处理事情,我将如何使用bufferStrategy?

共有1个答案

喻珂
2023-03-14

在我观看的一个游戏开发教程中,这个家伙使用了带有画布的Jframe,但他没有使用paintComponent方法。他只是创建了自己的render()方法,使用从创建BufferStrategy中获得的图形上下文来绘制所有的图形。

Canvas是一个AWT组件,使用BufferStrategy,您将接管绘制过程,并负责更新Graphics上下文,并调度将其推送到硬件/屏幕。

这通常被称为“活动绘画”,因为您经常(假设以恒定的帧速率)更新缓冲区。

如果要使用canvas,则可以使用bufferstrategy

本质上,它们是不同的绘画方法。但是请记住,如果您使用缓冲区策略,您将丢失所有的Swing API,您不能使用这种方法的Swing组件,因为它们不是设计成这样工作的...

 类似资料:
  • 首先,请不要因为创建一个问题而将我置于火刑柱上,而其他具有类似名称和内容的人却存在。我把它们都看了一遍,但没有找到解决办法。 调用repaint()绝对不会调用paintComponent(),不管我似乎尝试了什么。下面是与问题相关的所有代码: 按照预期,“创建的级别面板和设置的内容窗格”被打印到控制台。 从不打印“油漆组件级油漆”。“计时器重新绘制”每2秒打印一次,正如预期的那样。

  • 例: “foo”和“bar”可以是任何字符串键,但它们在键集中应该是唯一的。 我知道,使用Swagger,我可以定义一个对象数组,但这给出了一个不同的API,因为那时我们将拥有如下内容: 我已经阅读了“开放API规范”-“添加地图数据类型支持#38”页面。据我了解,它推荐使用additionalProperties,但似乎并没有回答我的需求(或者说与我使用的Swagger UI 2.1.4不兼容)

  • 嗯,这是一个非常新的提示。我声明要在window builder的帮助下自己编写GUI应用程序的代码,我已经决定停止使用netbeans,因为我在这里读到一些人说这很好。你可能认为我没有调查,但相信我,我做了功课。。。 我尝试了甲骨文所说的方式: > 公共类MyClass实现ActionListener{ someComponent。addActionListener(instanceOfMyCl

  • 在试图制作一个非常简单的子弹地狱游戏来学习java时,我遇到了一个障碍: repaint()没有调用油漆组件()。 这是整个程序,目前只需将我每秒创建50次的图像绘制到JFrame上的JPanel上。 在使用断点和println方法进行了一些调试之后,我可以确认正在读取正确的图像,gameTimerAction中的计时器每秒被调用50次,并且repaint()根本没有调用paintComponen

  • 问题内容: 我的第一个问题是- 构造函数应始终声明为公共吗? 如果我创建一个构造函数该怎么办。 我总是看到构造函数是隐式的。那么为什么构造函数有用呢?还是根本没有用。因为没有人可以调用它,或者永远也不能创建对象(由于构造函数)!这是我的第二个问题。 问题答案: 不, 构造函数 可以是,, 或(根本没有访问修饰符)。 做某事 并不意味着没有人可以访问它。这只是意味着该类之外的任何人都不能访问它。因此

  • 我一直在遵循的python flappy鸟AI教程从techwith timm,我得到了这个错误; 我的代码是这样的 我读过其他文章也有同样的问题,我理解,但是不是像那样的列表。我不知道该怎么办。 我试着做来获取“列表”的第一个图像,但它说对象不是列表。为什么?