回到高中之前,我正在创建一个服务器/客户端mmo,作为一个夏季项目,我选择使用Reddwarf并在客户端运行。我创建了一个GameCanvas对象,该对象扩展了Canvas(您猜对了),并覆盖了paint方法。

这是我的绘画方法:

    /**
 * Base for drawing the map, player, etc.
 */
@Override
public void paint(Graphics graphics) {
    graphics.dispose();
    if(strat == null) {
        return;
    }
    Graphics2D g = (Graphics2D) strat.getDrawGraphics();
    g.drawString(String.valueOf(System.currentTimeMillis()), 200, 200);
    g.dispose();
    strat.show();
}


Strat是一个两层缓冲策略,它从包含的JFrame(具有许多其他组件)中提取

GameCanvas也在JPanel的内部,该面板除了GameCanvas本身之外不包含任何其他内容。

我运行程序,可以看到当前的时间(以毫秒为单位),末尾有些乱七八糟的数字,整个JFrame和所有包含的组件都是灰色的,并且显示错误。

怎么了?噢,我之前用画布做了很多事情,却从未发生过这样的事情。 :/

最佳答案

如果我不得不猜测发生了什么,我会说您在绘制文本之前没有绘制背景。

您说这是一个Swing问题,但您使用的是Canvas。默认情况下,Swing是双缓冲的,我认为没有理由将AWT组件与缓冲策略一起使用。

我以前从未创建过MMO,但我想互联网响应时间将比Swing绘画时间要慢得多。因此,我建议您在需要自定义绘画时只使用JPanel并重写paintComponent()方法来进行绘画。不要忘记在开始时调用super.paintComponent()。

07-28 07:31