为什么这没有做任何事情?

时间:2018-02-17 15:50:09

标签: java awt

由于没有明显原因,以下代码"停止"打印出Will be drawing.

private void drawMaps() {
    System.out.println("Will be drawing...");
    bs = display.getCanvas().getBufferStrategy();
    if(bs == null){
        display.getCanvas().createBufferStrategy(3);
        return;
    }
    g = bs.getDrawGraphics();
    //Clear Screens
    g.clearRect(0, 0, 1000, 725);
    //Draw Here!
    System.out.println("Should be drawing");

    for(int i=0; i<toPlay.islands().size(); i++) {
        System.out.println("We're at island " + i);
        int x = 0, y = 0;
        if(i==0) {
            x=50;
            y=10;
        }
        Color toDraw = toPlay.islands().get(0).getTeam().getColor().getColor();
        g.setColor(toDraw);
        g.fillRect(x, y, 50, 50);
    }

    //End Drawing!
    bs.show();
    g.dispose();
}

我在控制台中得到的是Will be drawing,然后我的JFrame上没有任何内容。我不知道为什么这样做不起作用,因为这在以前不同的课程中有效。

1 个答案:

答案 0 :(得分:0)

显然你的代码确实在这里返回

if(bs == null){
    display.getCanvas().createBufferStrategy(3);
    return; // return!
}

再解释一下:

看起来您正在尝试使用“常用技术”在java awt中渲染画布,因此您需要在一个循环中运行drawMaps,并且在运行它时第一次 - 缓冲策略尚未初始化,因此您运行该策略的初始化,并在下一次调用时它将准备好,以便您的代码将更进一步。在某个地方你需要像

这样的代码
while (running)
{
    ...
    drawMaps();
    ..
}