我有一个基于GUI的游戏,它是实时的,并使用JPanel和JFrame。我目前有一个重写的paintComponent,它根据我的代码中的某些条件进行绘制。例如:
protected void paintComponent(Graphics gfx)
{
super.paintComponent(gfx);
gfx.setFont(new Font("default", Font.BOLD, 18));
if (one)
{
//do something
}
else
{
// do something else
}
}
这取决于条件一次。我已经实现了一个我想用于语句的鼠标监听器,这样如果有人点击某个部分它会显示其他内容。我想回去再次运行paintComponent,以便它绘制在旧的顶部之上。 paintComponent()
已经循环了吗?如果没有,你怎么能在循环中运行该方法?
答案 0 :(得分:3)
您可以通过致电repaint()
重新开始。您可以通过创建一个计时器来重新绘制它,或者只在需要更新时调用它(如果您的代码足够简单可能更好),可以循环执行此操作。
编辑:关于何时使用计时器:
不需要计时器。我曾经在游戏中使用它,因为我是自定义绘制整个窗口,并且有几十个总是在变化的东西要绘制,并且每次调用render()
都不会让我的CPU开心。但是,对于一些简单的事情,最好只在事情发生变化时才调用repaint()
,因为如果没有任何改变,你就会浪费那么多时间重新绘制它。