就像标题所说的那样,我无法在PlayN中使用Canvas / CanvasLayer。我的示例代码再简单不过了。 ImageLayer和默认背景可以很好地加载(该代码在此处注释掉了),但是画布实际上始终是不可见的。

public void init() {
    // create and add background image layer
    //Image bgImage = assetManager().getImage("images/bg.png");
    //ImageLayer bgLayer = graphics().createImageLayer(bgImage);
    //graphics().rootLayer().add(bgLayer);
    graphics().setSize(500, 400);

    CanvasLayer testLayer = graphics().createCanvasLayer(200,200);
    Canvas testCanvas = testLayer.canvas();

    graphics().rootLayer().add(testLayer);
    //testCanvas.clear();

    testCanvas.setStrokeColor(0x000000);
    testCanvas.setStrokeWidth(2);
    testCanvas.setFillColor(0xff0000);
    testCanvas.drawText("hello", 50, 50);
    testCanvas.drawLine(0, 0, 300,300);
    testCanvas.strokeRect(1, 1, 46, 46);

    //I even tried adding this.
    testLayer.setAlpha(1);
    testLayer.setVisible(true);
    testLayer.setScale(1);
}


我在Maven中使用PlayN 1.0.3。请注意,这是针对纯Java编译的。

TIA丹尼尔

最佳答案

您的颜色代码错误,还必须指定Alpha

0x000000实际上表示00 alpha,00红色,00 gren

试试这个代替:

testCanvas.setStrokeColor(Color.rgb(0, 0, 0));

或者如果您想要50%的透明度:

testCanvas.setStrokeColor(Color.argb(0x80, 0, 0, 0));

您可能还想添加背景,然后再添加CanvasLayer:

    SurfaceLayer bgLayer = graphics().createSurfaceLayer(500, 400);
    bgLayer.surface().setFillColor(Color.rgb(0,0,0));
    bgLayer.surface().fillRect(0, 0, bgLayer.surface().width(),
            bgLayer.surface().height());
    graphics().rootLayer().add(bgLayer);

08-18 12:56