2012-07-04 49 views
0

我想用PlayN中的透明顏色覆蓋/清除圖像的一部分。這可能以某種方式嗎? (PlayN 1.3.1)PlayN:清除圖像的一部分

這裏是一個示例代碼,我做的事:

@Override 
    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); 
    SurfaceLayer surfaceLayer = graphics().createSurfaceLayer(640, 480); 
    CanvasImage image = graphics().createImage(640, 480); 
    surfaceLayer.surface().setFillColor(0xff000000); 
    surfaceLayer.surface().fillRect(100, 100, 200, 200); 
    surfaceLayer.surface().setFillColor(0x00000000); 
    surfaceLayer.surface().fillRect(150, 150, 50, 50); 
    graphics().rootLayer().add(surfaceLayer); 
    image.canvas().setFillColor(0xff000000); 
    image.canvas().fillCircle(300, 300, 100); 
    image.canvas().setFillColor(0x00000000); 
    image.canvas().fillCircle(300, 300, 50); 
    graphics().rootLayer().add(graphics().createImageLayer(image)); 
    } 

所以我試圖與SurfaceLayer,並與ImageLayer他們無幫助(我想這種方式是不可能的覆蓋部分)。我想要有兩個相交的矩形和圓圈,但我只能看到其中的一個。

回答

2

用透明顏色繪圖或填充只會導致無法繪製。您在PlayN中清除像素數據的唯一操作是清除整個圖像的Canvas.clear()。您可以使用GWT的帆布像素業務接入和手動設置這些像素>>https://stackoverflow.com/a/10492578/1117740

對於一個簡單的解決方案...

...清除一個矩形,你可以只是做一個副本的形象,然後清除你的形象,並退回你想保留的部分。

顯然你不能這麼容易地用一個圓圈來做,儘管你可以用可能使用Bresenham的圓圈繪圖算法,並複製你想保留的每一個掃描線的片段。

+0

謝謝,這是一條路要走,但我擔心它不會幫助解決Android上的GC問題。 (再次讓事物透明並不需要重新創建整個圖層/圖像並將它們處理掉。) –