2011-12-26 254 views
1

就像標題所說,我無法在PlayN中使用Canvas/CanvasLayer。我的示例代碼不能簡單。 ImageLayer和默認背景加載正常(代碼在這裏被註釋掉),但畫布實際上始終不可見。Can not Canvas/CanvasLayer working in Playn

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); 
} 

我使用PlayN 1.0.3和Maven。請注意,這是純Java編譯。

TIA丹尼爾

回答

2

你的顏色代碼是錯誤的,你必須指定阿爾法以及

0x000000實際上意味着00字母,00紅,00格倫

試試這個:

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); 
+0

感謝名單!我使用演示中的代碼,並沒有習慣顏色的0xXXX表示法,期望更多'新的Color()'類定向表示法,即java和all。很明顯,我可以看到原生效益時,移植到GWT/javascript等 Thanx指出我失蹤的兩位數字,並節省我的時間!人們總是認爲事業比事情複雜得多:-) – 2011-12-26 20:31:53