为什么我的 java 渲染引擎没有更新 window?
why is my java rendering engine not updating the window?
我正在为游戏制作渲染器,一切正常,但 jpanel 不会更新,有时会出现乱序。
示例:
这是渲染框架的代码:
static Container c;
static JFrame f;
static ArrayList<renderable_object> objs = new ArrayList<>();
public void main () {
Image iconI = Toolkit.getDefaultToolkit().getImage(icon);
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.getContentPane().add(new canvas());
c = f.getContentPane();
}
class canvas extends JComponent {
public void paint(Graphics g)
{
Dimension size = getSize();
g.drawRect(0, 0, size.width, size.height);
for (renderable_object part : objs) {
g.setColor(part.c);
if (part.type == 1) {
g.drawLine(part.i,part.j,part.k,part.l);
} else if (part.type == 2) {
g.drawOval(part.i,part.j,part.k,part.l);
} else if (part.type == 3) {
g.drawRect(part.i,part.j,part.k,part.l);
} else if (part.type == 4) {
g.drawString(part.name,part.k,part.l);
}
}
objs.clear();
}
}
class renderable_object {
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int type = 0;
String name = "";
Color c = new Color(0,0,0);
}
}
arraylist 确保渲染器正确排序对象。
感谢帮助。
我看到的第一个问题是您没有在自定义 paint
方法中首先调用 super.paint(g);
。
使用 JComponent 时,您可以使用它内置的双缓冲功能。但是,此功能不适用于 paint
方法,但适用于 paintComponent
方法,因此您应该将当前的解决方案替换为这样的解决方案:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// your drawing code here
}
并且在主要更新中:
f.repaint();
我正在为游戏制作渲染器,一切正常,但 jpanel 不会更新,有时会出现乱序。
示例:
这是渲染框架的代码:
static Container c;
static JFrame f;
static ArrayList<renderable_object> objs = new ArrayList<>();
public void main () {
Image iconI = Toolkit.getDefaultToolkit().getImage(icon);
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.getContentPane().add(new canvas());
c = f.getContentPane();
}
class canvas extends JComponent {
public void paint(Graphics g)
{
Dimension size = getSize();
g.drawRect(0, 0, size.width, size.height);
for (renderable_object part : objs) {
g.setColor(part.c);
if (part.type == 1) {
g.drawLine(part.i,part.j,part.k,part.l);
} else if (part.type == 2) {
g.drawOval(part.i,part.j,part.k,part.l);
} else if (part.type == 3) {
g.drawRect(part.i,part.j,part.k,part.l);
} else if (part.type == 4) {
g.drawString(part.name,part.k,part.l);
}
}
objs.clear();
}
}
class renderable_object {
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int type = 0;
String name = "";
Color c = new Color(0,0,0);
}
}
arraylist 确保渲染器正确排序对象。
感谢帮助。
我看到的第一个问题是您没有在自定义 paint
方法中首先调用 super.paint(g);
。
使用 JComponent 时,您可以使用它内置的双缓冲功能。但是,此功能不适用于 paint
方法,但适用于 paintComponent
方法,因此您应该将当前的解决方案替换为这样的解决方案:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// your drawing code here
}
并且在主要更新中:
f.repaint();